您可以在SQL Server表中定义一个新列,为新行自动生成唯一标识符吗?

时间:2012-07-20 09:30:20

标签: sql sql-server tsql sql-server-2012

SQL Server中的自动增量列会自动填充;是否可以定义一个UniqueIdentifier列以在插入时自动生成而不使用触发器?

这将是桌面上的辅助唯一键。我需要创建它,因为我们现在需要一个公共主键,可以在查询字符串中使用。

传统基础架构仍然依赖于旧的int主键。鉴于旧的基础架构首先创建了记录,我希望SQL Server在插入时透明地创建辅助GUID密钥 - 如果可能的话。

非常感谢

2 个答案:

答案 0 :(得分:13)

您可以使用Uniqueidentifier类型的列,默认值为NEWID()

答案 1 :(得分:3)

如果使用默认值NEWID()向表中添加列,然后更新现有行以获得新ID。你可能会

--  Create test table
CREATE TABLE Test1
(
ID int IDENTITY(1,1)
,Txt char(1)
);

-- Insert data
INSERT INTO Test1(Txt)
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd' UNION ALL
SELECT 'e';

-- Add column
ALTER TABLE Test1
ADD GlobalID uniqueidentifier DEFAULT(NEWID());

-- View table, default value not added for existing rows
SELECT *
FROM Test1;

-- Update null ids with guids
UPDATE Test1
SET GlobalID = NEWID()
WHERE GlobalID IS NULL

-- Insert new data
INSERT INTO Test1(Txt)
SELECT 'f' UNION ALL
SELECT 'g' UNION ALL
SELECT 'h' UNION ALL
SELECT 'i' UNION ALL
SELECT 'j';

-- View table
SELECT *
FROM Test1;

-- Drop table
DROP TABLE Test1