检索记录的uniqueidentifier键值

时间:2008-12-04 08:37:17

标签: database uniqueidentifier

在SQL Server 2005的上下文中,我有一个表,其主键是uniqueidentifier(GUID),具有newid()函数生成的默认值。我想编写一个存储过程,将新记录插入表中。我如何获得记录的PK值?对于身份声明字段,这很容易 - 我称之为scope_identity()。我该如何处理guids?

谢谢, 卢西恩

8 个答案:

答案 0 :(得分:4)

在插入之前生成GUID会引入索引碎片。

无需在插入之前声明GUID,

我建议:

  1. 使用NEWSEQUENTIALID默认约束生成连续的Guids。 (这将消除索引碎片 - Guids作为主键的众所周知的问题。)

  2. 使用新的OUTPUT子句(sql server 2005中的新增功能),它将使您能够获得新插入的GUID。

  3. 以下示例:

    DECLARE @outputTblCustomer1 TABLE (CustomerID uniqueidentifier)
    
    -- Customer1  
    
    INSERT INTO dbo.Customer1 (CustomerNumber, LastName) OUTPUT INSERTED.CustomerID INTO @outputTblCustomer1 VALUES (-1, N'LastName')  
    
    SELECT CustomerID FROM @outputTblCustomer1
    
    -- Customer3 
    
    INSERT INTO dbo.Customer3 (CustomerNumber, LastName) VALUES (-1, N'LastName')  
    
    SELECT SCOPE_IDENTITY() AS CustomerID
    

答案 1 :(得分:3)

我会在插入记录之前生成一个新的Guid,并明确地使用这个新的Guid作为记录的PK。然后在插入后使用该guid,知道它引用了刚刚插入的行,例如

DECLARE @newGuid uniqueidentifier
SET @newGuid = newid()

INSERT INTO myTable(id, stringval)
VALUES (@newGuid, "Hello")

SELECT * FROM myTable
WHERE id = @newGuid

答案 2 :(得分:1)

您必须在存储过程中创建唯一标识符并将其插入表中,然后在插入完成后返回值。

CREATE PROCEDURE insNewGuidIdRow 
    @newId  UNIQUEIDENTIFIER output,
    @otherData  NVARCHAR(10)
AS
BEGIN
    SET @newId = NEWID()

    INSERT INTO GuidIdTable(id, otherData)
    VALUES (@newId, @otherData)
END

它只使用inserted值而不是创建一个新的guid作为默认值。

答案 3 :(得分:0)

您可以使用SELECT语句将其作为行返回,或者如果一次只有一行,则使用OUTPUT参数。

答案 4 :(得分:0)

如果您已经在存储过程中,则可以检索newid(),执行插入并返回guid:

CREATE PROCEDURE Insert_myTable(@values...) AS

DECLARE @pk GUID
SET @pk = NEWID()

INSERT INTO myTable(PKID, values...) VALUES (@pk, @values...)

SELECT @pk

答案 5 :(得分:0)

查询:

如果主键列是第一列使用executioncalar()执行insert stmt ...

它将返回查询返回的结果集中第一行的第一列。

程序: INSERT INTO tblBrowser(IDString)VALUES(@IDString) SET @ID = @@ Identity 特别声明一个ado paramater 返回参数,它将接收由sproc返回的值 设置par = .CreateParameter(“intOutput”,adVarChar,adParamOutput,30)。

答案 6 :(得分:0)

使用如下表格:

CREATE TABLE [dbo].[TableName ](
    [Code] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [Name] [nvarchar](100) NOT NULL)

ALTER TABLE [dbo].[TableName ] ADD  CONSTRAINT [DF_Questionnaire_Code]  DEFAULT (newid()) FOR [Code]

插入SQL Like:

INSERT INTO TableName (Name)
OUTPUT  Inserted.Code AS NewGUID
VALUES  ('TEST')

您将获得NEW GUID作为输出:

NewGUID
------------------------------------
F540C0F8-ADBC-4054-BAB6-1927DE59FA99

答案 7 :(得分:0)

使用适用于我的

  DECLARE @id uniqueidentifier;
  SELECT @id=NEWID()    
  INSERT INTO MyTable(ID,other)
  VALUES(@id,'other');