Sql Server - недостаточно места для результата, чтобы преобразовать значение uniqueidentifier в char - PullRequest
11 голосов
/ 12 апреля 2011

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

Сообщение 8170, уровень 16, состояние 2, строка 2 Недостаточно места для преобразования Значение уникального идентификатора для символа.

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

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

Ответы [ 3 ]

26 голосов
/ 12 апреля 2011

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

6 голосов
/ 12 апреля 2011

Вам необходимо использовать одну из 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
1 голос
/ 26 октября 2018

Увеличьте длину столбца uid от varchar (32) -> varchar (36) потому что гид берет 36 символов Guid.NewGuid (). ToString () -> 36 символов выходы: 12345678-1234-1234-1234-123456789abc

...