nvarchar
如何在 SQL Server 2008 Express 中创建具有数据类型的自动增量主键?我想要我的输出主键,如:
Id Name
A1 AAA
A2 BBB
谢谢
nvarchar
如何在 SQL Server 2008 Express 中创建具有数据类型的自动增量主键?我想要我的输出主键,如:
Id Name
A1 AAA
A2 BBB
谢谢
您不能直接执行此操作 - 您可以执行以下操作:
所以尝试这样的事情:
CREATE TABLE dbo.YourTable
(ID INT IDENTITY(1,1) NOT NULL,
StringPrefix NVARCHAR(10) NOT NULL,
IDandPrefix AS ISNULL(StringPrefix + CAST(ID AS NVARCHAR(10)), 'X') PERSISTED
)
现在,当您插入这样的行时:
INSERT INTO dbo.YourTable(StringPrefix) VALUES('A'), ('B'), ('A')
你应该得到这样的行:
ID StringPrefix IDandPrefix
1 A A1
2 B B2
3 A A3
IDandPrefix
您也可以在该列上定义主键:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED (IDandPrefix)
另一种解决方法是将 Id 的默认值设置为可以派生下一个值的函数。
功能(SQL Server 2008):
CREATE FUNCTION [dbo].[fx_GetNextMyTableId] ()
RETURNS varchar(50)
AS
BEGIN
DECLARE @NextId varchar(50), @IdCount int, @Prefix varchar(25), @NumberOfSuffixDigits tinyint
Set @Prefix = 'A'
Set @NumberOfSuffixDigits = 1
SELECT @IdCount = count(*) FROM dbo.MyTable
SET @NextId = @Prefix + REPLICATE('0', @NumberOfSuffixDigits - LEN(@IdCount + 1)) + CAST (@IdCount + 1 AS varchar)
RETURN (@NextId)
END
功能(SQL Server 2012):
CREATE FUNCTION [dbo].[fx_GetNextMyTableId] ()
RETURNS varchar(50)
AS
BEGIN
DECLARE @NextId varchar(50), @IdCount int, @Prefix varchar(25), @NumberOfSuffixDigits tinyint
Set @Prefix = 'A'
Set @NumberOfSuffixDigits = 1
SELECT @IdCount = count(*) FROM dbo.MyTable
SET @NextId = @Prefix + FORMAT(@IdCount + 1, REPLICATE('0', @NumberOfSuffixDigits))
RETURN (@NextId)
END
默认设置:
ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [DEFAULT_Id] DEFAULT [dbo].[fx_GetNextMyTableId]() FOR [Id]