首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于GUID的SCOPE_IDENTITY()?

用于GUID的SCOPE_IDENTITY()?
EN

Stack Overflow用户
提问于 2009-10-02 14:42:57
回答 5查看 60.5K关注 0票数 100

谁能告诉我,在SQL Server中使用GUID作为主键时,是否有SCOPE_IDENTITY()的等价物?

我不想先创建GUID并保存为变量,因为我们使用连续的GUID作为主键。

你知道检索最后插入的GUID主键的最佳方法是什么吗?

EN

回答 5

Stack Overflow用户

发布于 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

参考:Exploring SQL 2005’s OUTPUT Clause

票数 103
EN

Stack Overflow用户

发布于 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();
...
票数 65
EN

Stack Overflow用户

发布于 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之前请三思。:)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1509947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档