Sql Server - недостаточно места для результата, чтобы преобразовать значение uniqueidentifier в char
Я получаю ошибку ниже, когда я запускаю 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 (), если я вытащу его и заменим на какую-то строку, она работает.
Я ценю любую помощь. Заранее спасибо.
5 ответов
Гиду нужно 36 символов (из-за тире). Вы предоставляете только 32-символьный столбец. Недостаточно, отсюда и ошибка.
Вам нужно использовать один из 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
Я получил эту ошибку, когда пытался выполнить простую конкатенацию строк для GUID. По-видимомуVARCHAR
недостаточно большой.
Пришлось поменять:
SET @foo = 'Old GUID: {' + CONVERT(VARCHAR, @guid) + '}';
кому:
SET @foo = 'Old GUID: {' + CONVERT(NVARCHAR(36), @guid) + '}';
... и все было хорошо. Огромное спасибо за предыдущие ответы на этот вопрос!
Вы можете попробовать это. Это сработало для меня.
Укажите длину для VARCHAR при приведении/преобразовании значения. Для уникального идентификатора используйте VARCHAR(36), как показано ниже:
SELECT Convert (varchar(36),NEWID()) AS NEWID
Длина по умолчанию для типа данных VARCHAR, если мы не указываем длину во время CAST/CONVERT, составляет 30..
1 кредит
Пожалуйста, увеличьте длину столбца uid из varchar(32) ->varchar(36), потому что guid принимает 36 символов. Guid.NewGuid().ToString() -> 36 символов: 12345678-1234-1234-1234-123456789abc