web-dev-qa-db-ja.com

[一意の識別子]列に任意のGUID=)を挿入するには、「SET IDENTITY_INSERT」が必要ですか?

SQL Server 2016および2017、Standard Edition

(別のテーブルからの)生データを、2つのuniqueidentifier列を持つテーブルに挿入する必要があります。

これにはSET IDENTITY_INSERT Carrier ON

ここにテーブルがあります:

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

CREATE TABLE [dbo].[Parkingspace](
    [ParkingspaceId] [uniqueidentifier] NOT NULL,
    [AccountId] [uniqueidentifier] NULL,
    [ParkingspaceType] [smallint] NULL,
 CONSTRAINT [PK_ParkingspaceId] PRIMARY KEY CLUSTERED 
(
    [ParkingspaceId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

次の作業になりますなしIDENTITY_INSERTオプション? (私はそうすべきだと思いますが、ここのDBAはIDENTITY_INSERTオプション。)

INSERT INTO Parkingspace 
  (ParkingspaceID,AcountID,ParkingspaceType)
  SELECT * FROM PRODDBCopy.Parkingspace

IDENTITY_INSERTIDENTITY property を含む列にのみ使用されます。

UNIQUEIDENTIFIER は単なるデータ型です。

あなたの挿入ステートメントは動作します。

8
Paul White 9

あなたは常にアイデンティティ挿入の必要性があるかどうかをチェックできます:

SELECT CONCAT(N'SET IDENTITY_INSERT ', QUOTENAME(OBJECT_SCHEMA_NAME([object_id])), N'.', QUOTENAME( OBJECT_NAME([object_id])), N' ON;')
FROM sys.identity_columns
WHERE [object_id] = OBJECT_ID(table_of_your_interest);

上記でレコードが返された場合は、挿入ステートメントの前に貼り付けてください。

1
Bartosz X

ID挿入は、SQLサーバーのID列にのみ適用され、数値以外のID列を作成しようとすると、次のエラーが発生します。

ID列 'id'は、int、bigint、smallint、tinyint、または10進数または数値のデータ型で、スケールが0で、暗号化されておらず、null不可に制限されている必要があります。

一意の識別子は許可されていません。

0
jmoreno