谁能告诉我,在SQL Server中使用GUID作为主键时,是否有SCOPE_IDENTITY()
的等价物?
我不想先创建GUID并保存为变量,因为我们使用连续的GUID作为主键。
你知道检索最后插入的GUID主键的最佳方法是什么吗?
发布于 2009-10-02 16:15:37
您可以使用OUTPUT获取GUID。当您插入多个记录时,这也是有效的。
CREATE TABLE dbo.GuidPk (
ColGuid uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
Col2 int NOT NULL
)
GO
DECLARE @op TABLE (
ColGuid uniqueidentifier
)
INSERT INTO dbo.GuidPk (
Col2
)
OUTPUT inserted.ColGuid
INTO @op
VALUES (1)
SELECT * FROM @op
SELECT * FROM dbo.GuidPk
发布于 2011-12-06 18:11:23
当使用GUID作为主键时,没有SCOPE_IDENTITY()等效项,但是您可以使用OUTPUT子句来实现类似的结果。您不需要使用表变量进行输出。
CREATE TABLE dbo.GuidTest (
GuidColumn uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
IntColumn int NOT NULL
)
GO
INSERT INTO GuidTest(IntColumn)
OUTPUT inserted.GuidColumn
VALUES(1)
如果您希望从.Net客户端读取值,则上面的示例非常有用。要从.Net中读取值,只需使用ExecuteScalar方法。
...
string sql = "INSERT INTO GuidTest(IntColumn) OUTPUT inserted.GuidColumn VALUES(1)";
SqlCommand cmd = new SqlCommand(sql, conn);
Guid guid = (Guid)cmd.ExecuteScalar();
...
发布于 2009-10-02 15:30:56
您希望使用NEWID()
declare @id uniqueidentifier
set @id = NEWID()
INSERT INTO [dbo].[tbl1]
([id])
VALUES
(@id)
select @id
但是聚集索引问题存在于GUID中。阅读这篇文章NEWSEQUENTIALID() .These都是我的想法,在使用GUID作为primary Key之前请三思。:)
https://stackoverflow.com/questions/1509947
复制相似问题