web-dev-qa-db-ja.com

SQL Serverでidentity_insertをonに設定する方法

コマンドset identity_insert table_name on;、しかし何らかの理由で実際には属性を変更していません。テーブルの作成に使用したアカウントでそれを実行し、「管理者」アカウントも作成して、(私の知る限り)何でも実行する権限を与えました。

いずれかのアカウントでコマンドを実行すると、「影響を受ける行が0」という結果が表示されるたびに、次のエラーで挿入したい行を挿入するクエリを実行できません。

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

さらに、次のようにクエリにスキーマ名を含めようとしました:

set identity_insert mySchema.table_name on; 

しかし、私は次のエラーを受け取ります:

オブジェクト「mySchema.table_name」が存在しないか、権限がないため、見つかりません。

また、私のプロジェクトは次のようになります。

localhost\SQLEXPRESS
-Databases
--System Databases
--mySchema

誰かがこの問題の解決策を知っていますか?

5
Joe Essey

正しい構文 を使用しています:

SET IDENTITY_INSERT dbo.sometable ON;

ただし、SQL Serverのスキーマは データベースとは異なります です。

オブジェクトのデフォルトのスキーマは、私の例のようにdboです。接続している場合はデータベース名を指定する必要はありませんが、次のようにすることができます。

SET IDENTITY_INSERT DbName.dbo.sometable ON;

現在の設定を取得する方法はないようです セッションスコープで永続化されていません

このクエリをデータベースで実行すると、そこにあるすべてのテーブルの完全修飾名が返されます。

SELECT 
    QUOTENAME(DB_NAME())+'.'+
    QUOTENAME(OBJECT_SCHEMA_NAME(object_id))+'.'+
    QUOTENAME(OBJECT_NAME(object_id)) AS FullTableName 
FROM sys.tables;

SET IDENTITY_INSERT ON...は、挿入と同じセッションで実行する必要があります。

5
Sebastian Meine