あるテーブルから別のテーブルにデータをコピーしているときにSQLクエリを実行すると、以下のエラーが発生します。
メッセージ8170、レベル16、状態2、行2uniqueidentifier値をcharに変換するには結果スペースが不十分です。
私のSQLクエリは、
INSERT INTO dbo.cust_info (
uid,
first_name,
last_name
)
SELECT
NEWID(),
first_name,
last_name
FROM dbo.tmp_cust_info
私のテーブル作成スクリプトは、
CREATE TABLE [dbo].[cust_info](
[uid] [varchar](32) NOT NULL,
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
CREATE TABLE [dbo].[tmp_cust_info](
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
NEWID()に問題があると確信しています。取り出して文字列に置き換えると、機能します。
私はどんな助けにも感謝します。前もって感謝します。
GUIDには36文字が必要です(ダッシュのため)。 32文字の列のみを指定します。十分ではないため、エラーが発生します。
3つの選択肢のいずれかを使用する必要があります
1、16バイトとして内部的に格納するuniqueidentifier列。この列から選択すると、8-4-4-4-12形式を使用して自動的にレンダリングされます表示用。
CREATE TABLE [dbo].[cust_info](
[uid] uniqueidentifier NOT NULL,
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
2、非推奨フィールドをchar(36)に変更して、ダッシュを含む形式に適合するようにします。
CREATE TABLE [dbo].[cust_info](
[uid] char(36) NOT NULL,
[first_name] [varchar](100) NULL,
[last_name] [varchar](100) NULL)
3、非推奨 32文字のコンポーネントと同様に、ダッシュなしで保存します
INSERT INTO dbo.cust_info (
uid,
first_name,
last_name
)
SELECT
replace(NEWID(),'-',''),
first_name,
last_name
FROM dbo.tmp_cust_info
Guidは36文字を取るため、uid列の長さをvarchar(32)-> varchar(36)から増やします。Guid.NewGuid()。ToString()-> 36文字の出力:12345678-1234-1234-1234-123456789abc