22

あるテーブルから別のテーブルにデータをコピーしているときに SQL クエリを実行すると、以下のエラーが発生します。

メッセージ 8170、レベル 16、状態 2、行 2 uniqueidentifier 値を 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()に問題があると確信しています。取り出して文字列に置き換えると、機能しています。

助けていただければ幸いです。前もって感謝します。

4

4 に答える 4

39

GUID には 36 文字が必要です (ダッシュがあるため)。32 文字の列のみを指定します。十分ではないため、エラーが発生します。

于 2011-04-12T00:14:34.723 に答える
7

3つの選択肢のいずれかを使用する必要があります

1、uniqueidentifier 列。内部に 16 バイトとして格納されます。この列から選択すると、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
于 2011-04-12T00:45:11.087 に答える