コマンド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
誰かがこの問題の解決策を知っていますか?
正しい構文 を使用しています:
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...
は、挿入と同じセッションで実行する必要があります。