我有一個char(10)列在一個表中的SQL Server 2005數據庫:MAX在炭火列在SQL-服務器
CREATE TABLE [dbo].[RMA](
[IdRMA] [int] IDENTITY(1,1) NOT NULL,
[RMA_Number] [char](10) NULL
CONSTRAINT [PK_RMA] PRIMARY KEY CLUSTERED
(
[IdRMA] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[RMA] WITH CHECK ADD CONSTRAINT [CK_UNIQUE_RMA_NUMBER] CHECK (([rma_number] IS NULL OR [dbo].[_CountRmaNumber]([rma_number])<(2)))
GO
ALTER TABLE [dbo].[RMA] CHECK CONSTRAINT [CK_UNIQUE_RMA_NUMBER]
我知道這將是更好地使一個Int - 列,當我想訂購或聚合它。但是我想知道的是,是否仍然保證SELECT MAX(RMA_Number)
總是返回SQL-Server中最高的數字? 值f.e.的格式是:RMA0003715
。 RMA_Number是一個包含10個字符的連續數字,始終以RMA開頭。
編輯:感謝所有的確認和詹姆斯懷斯曼的建議,檢查正確的格式。我添加了一個約束:
ALTER TABLE [dbo].[RMA] WITH CHECK ADD CONSTRAINT [CK_UNIQUE_RMA_NUMBER] CHECK (([rma_number] IS NULL OR [dbo].[_CountRmaNumber]([rma_number])<(2)))
ALTER TABLE [dbo].[RMA] CHECK CONSTRAINT [CK_RMA_Number_Format]
謝謝。
是 - 根據您使用的排序規則,將返回「最高」值.... – 2010-12-09 10:34:20
使用您的檢查約束,您最好使用LIKE檢查來檢查數字部分('LIKE' [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]'`或`'不LIKE'%[^ 0-9] %'`)。 ISNUMERIC對例如`'1d2'`。 – 2010-12-09 11:48:41