Подтвердить что ты не робот

Sql Server - Недостаточное пространство результатов для преобразования значения уникального идентификатора в char

Я получаю ниже ошибки при запуске sql-запроса при копировании данных из одной таблицы в другую,

Msg 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(), если я вынимаю и заменяю ее некоторой строкой, в которой он работает.

Я ценю любую помощь. Спасибо заранее.

4b9b3361

Ответ 1

A guid требует 36 символов (из-за тире). Вы предоставляете только столбец с 32 символами. Недостаточно, следовательно, ошибка.

Ответ 2

Вам нужно использовать одну из трех альтернатив

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

Ответ 3

Увеличьте длину столбца uid из varchar (32) → varchar (36), поскольку guid принимает 36 символов. Guid.NewGuid(). ToString() → 36 символов: 12345678-1234-1234-1234-123456789abc