4

uniqueidentifier を主キーとして使用するデータベースを作成しました。最終的にこのようなパラメータ化されたクエリを実行しようとしています。(insert into someTable (uniqueID) Values('76c14693-5475-4224-ba94-7d30c919ac59') (uniqueID is my PK). この挿入ステートメントは、SQL Server Management Studio で実行すると問題なく実行されますが、私のコードから実行してみてください。

エラー: IDENTITY_INSERT が OFF に設定されている場合、テーブル 'someTable' の ID 列に明示的な値を挿入できません。

これを調べたところ、IDENTITY_INSERT をオンにすることに関する多くの提案がありますが、それらはすべてストアド プロシージャを使用しています。パラメータ化されたクエリを使用してこれを行う必要があります。または、データベースで新しく作成された GUID を取得する方法が必要です。これは、ある時点で誰もが必要とするもののようです。簡単な解決策はありますか?

PS。その ID を使用して他のテーブルにレコードを追加する必要があるため、ID が必要です。

編集:

問題のテーブルの構造は次のとおりです

CREATE TABLE [dbo].[someTable]
( 
        [NewsID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_someTable_NewsID] DEFAULT (newid()), 
        [ShortTitle] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
        [DateCreated] [datetime] NULL CONSTRAINT [DF_someTable_DateCreated] DEFAULT (getdate()), 
        CONSTRAINT [PK_cmc_News_1] PRIMARY KEY CLUSTERED ( 
            [NewsID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF
        ) ON [PRIMARY] 
) ON [PRIMARY]
4

4 に答える 4

3

実際には、テーブルに IDENTITY 列があり、IDENTITY 列のデータ型が uniqueidentifier ではない場合にのみエラーが発生するため、テーブルに他の問題または他の列があるはずです-よろしいですか同じテーブルに挿入していますか、それとも ID 列に特定の値を指定しようとしている何らかの ORM ツールを使用していませんか? おそらく、テーブル定義をスクリプト化して添付できますか?

編集:質問にスキーマが含まれるようになったため、追加情報を追加します。

この特定のテーブルには ID がないように見えるので、最初に問題のテーブルにトリガーが定義されているかどうかを確認し、ID を使用する別のテーブルで挿入が試行されていないかどうかを確認します...

于 2009-11-11T19:04:12.700 に答える
0

フィールドの Identity プロパティを On に設定しました。これは、レコードを挿入したときにデータベースが ID を作成することを意味します。フィールドの Identity を Off に設定すると、挿入で値を設定できます。

または、データベースに ID を作成させてから、作成された ID を取得します。

insert into someTable ();select scope_identity()

注: ストアド プロシージャとパラメーター化されたクエリは排他的ではありません。私は常にパラメーター化されたクエリを使用してストアド プロシージャを呼び出します。

于 2009-11-11T19:00:59.417 に答える
0

問題は、ID を自分で挿入することが許可されていないことです (これは、エンジンが自分で ID を挿入したいためだと思います)。この機能を有効にするには、クエリの前に次のクエリを実行する必要があります。

SET IDENTITY_INSERT <tablename> ON 
于 2009-11-11T18:58:03.920 に答える
0

そもそも、GUID は主キーの恐ろしい選択です。

ただし、それらを使用している場合は、ID フィールドとして同じフィールドを定義しないでください。テーブル構造コードを投稿してください。正しく再定義するのに役立ちます。

于 2009-11-11T18:57:11.763 に答える