Sql server 如何使用nvarchar在sql server中添加自动增量主键?

Sql server 如何使用nvarchar在sql server中添加自动增量主键?,sql-server,sql-server-2008,sqldatatypes,Sql Server,Sql Server 2008,Sqldatatypes,如何在SQL Server 2008 Express中使用nvarchar数据类型生成自动递增主键?我希望我的输出主键如下所示: Id Name A1 AAA A2 BBB 谢谢很简单。你不能。自动增量仅适用于数字类型 相反,添加一个int或bigint自动增量主键,并使用a生成其他nvarchar列 最后,您可以在计算列上执行此操作。您不能直接执行此操作-您可以执行以下操作: 创建自动增量列以处理数字零件 添加一个连接字符串前缀和数字的计算列

如何在SQL Server 2008 Express中使用
nvarchar
数据类型生成自动递增主键?我希望我的输出主键如下所示:

 Id        Name
 A1        AAA
 A2        BBB

谢谢

很简单。你不能。自动增量仅适用于数字类型

相反,添加一个
int
bigint
自动增量主键,并使用a生成其他
nvarchar


最后,您可以在计算列上执行此操作。

您不能直接执行此操作-您可以执行以下操作:

  • 创建自动增量列以处理数字零件
  • 添加一个连接字符串前缀和数字的计算列
因此,请尝试以下方法:

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
现在,当您插入这样的行时:

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
您应该得到如下行:

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):

功能(SQL Server 2012):

设置默认值:

ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [DEFAULT_Id] DEFAULT [dbo].[fx_GetNextMyTableId]() FOR [Id]

是的,我同意你的看法