3

SQL Server 2005 のコンテキストでは、主キーが一意の識別子 (GUID) であり、newid() 関数によって既定値が生成されるテーブルがあります。新しいレコードをテーブルに挿入するストアド プロシージャを作成したいと考えています。レコードの PK 値を取得するにはどうすればよいですか? ID 宣言されたフィールドの場合、これは簡単です。scope_identity() を呼び出します。ガイドをどのように進めればよいですか?

ありがとう、ルシアン

4

8 に答える 8

4

挿入前にGUIDを生成すると、インデックスの断片化が発生します。

挿入前にGUIDを宣言する必要はありません。

私がお勧めします:

  1. NEWSEQUENTIALIDのデフォルトの制約を使用して、連続するGUIDを生成します。(これにより、インデックスの断片化が排除されます。これは、Guidを主キーとするよく知られた問題です)。

  2. 新しいOUTPUT句(SQL Server 2005の新機能)を使用すると、新しく挿入されたGUIDを取得できます。

以下の例:

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
于 2008-12-04T09:03:53.510 に答える
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
于 2008-12-04T08:43:47.310 に答える
1

ストアドプロシージャで一意の識別子を作成してテーブルに挿入し、挿入が完了した後に値を返す必要があります。

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

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

デフォルト値として新しいGUIDを作成する代わりに、挿入された値を使用するだけです。

于 2008-12-04T08:55:46.757 に答える
0

クエリの場合:

主キー列が最初の列の場合挿入stmtの実行にはexecutescalar()を使用します。

クエリによって返された結果セットの最初の行の最初の列を返します。

プロシージャの場合:INSERT INTO tblBrowser(IDString)VALUES(@IDString)SET @ID = @@ Identityは、特に戻りパラメータとしてadoパラメータを宣言し、sprocによって返された値を受け取りますSet par = .CreateParameter( "intOutput"、 adVarChar、adParamOutput、30)。

于 2008-12-04T08:57:20.247 に答える
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
于 2008-12-04T08:48:39.033 に答える
0

私のために働くこれを使用してください

  DECLARE @id uniqueidentifier;
  SELECT @id=NEWID()    
  INSERT INTO MyTable(ID,other)
  VALUES(@id,'other');
于 2013-03-23T13:38:22.497 に答える
0

SELECTステートメントを使用して行として返すかOUTPUT、一度に 1 行の場合はパラメーターを使用して返すことができます。

于 2008-12-04T08:46:13.047 に答える