質問

SQL Server 2005のコンテキストでは、プライマリキーがuniqueidentifier(GUID)であり、newid()関数によって生成されるデフォルト値を持つテーブルがあります。テーブルに新しいレコードを挿入するストアドプロシージャを作成したい。レコードのPK値を取得するにはどうすればよいですか? ID宣言されたフィールドの場合、これは簡単です-scope_identity()を呼び出します。 GUIDを使用するにはどうすればよいですか

ありがとう、 ルシアン

役に立ちましたか?

解決

レコードを挿入する前に新しいGUIDを生成し、この新しいGUIDをレコードのPKとして明示的に使用します。次に、挿入した行を参照していることを確認して、挿入後にそのGUIDを使用します。例:

DECLARE @newGuid uniqueidentifier
SET @newGuid = newid()

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

SELECT * FROM myTable
WHERE id = @newGuid

他のヒント

挿入前に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

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

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

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

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

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

既にストアドプロシージャを使用している場合は、newid()を取得し、挿入を実行して、guidを返すことができます。

CREATE PROCEDURE Insert_myTable(@values...) AS

DECLARE @pk GUID
SET @pk = NEWID()

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

SELECT @pk

クエリの場合:

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

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

手順: INSERT INTO tblBrowser(IDString)VALUES(@IDString) SET @ID = @@ Identity ADOパラメータを特に宣言します パラメータを返すと、sprocによって返された値を受け取ります par = .CreateParameter(<!> quot; intOutput <!> quot ;, adVarChar、adParamOutput、30)を設定します。

次のようなテーブル:

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の挿入:

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

出力として新しいGUIDを取得します。

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

自分に合った機能を使用してください

  DECLARE @id uniqueidentifier;
  SELECT @id=NEWID()    
  INSERT INTO MyTable(ID,other)
  VALUES(@id,'other');
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top