如何在SQL Server 2008 Express中使用nvarchar
数据类型自动增加主键?我想要输出主键,如:
Id Name
A1 AAA
A2 BBB
谢谢
答案 0 :(得分:7)
你不能直接这样做 - 可以做的是:
所以尝试这样的事情:
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)
答案 1 :(得分:3)
这很简单。你不能。自动增量仅适用于数字类型。
相反,添加int
或bigint
自动增量PK并使用computed column生成其他nvarchar
列。
最后,您可以在计算列上create a non-clustered index。
答案 2 :(得分:2)
另一种解决方法是将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]