Почему SQL Server требует преобразования INT в NVARCHAR? - PullRequest
1 голос
/ 25 августа 2009

Во время вчерашнего испытания я узнал, что вы не можете передать этот запрос в EXEC ():

@SQL = @SQL + 'WHERE ID = ' + @SomeID
EXCEC(@SQL)

Где @SomeID - INT, а @SQL - NVARCHAR. Это будет жаловаться на невозможность конвертировать NVARCHAR обратно в INT во время выполнения.

Я понял, что ты должен сделать это как

@SQL = @SQL + 'WHERE ID = ' + CONVERT(NVARCHAR(20), @SomeID)

Что я не понял, так почему? Почему SQL Server не понимает INT, когда просто +: вписывается в NVARCHAR? Я предполагаю, что это как-то связано с наборами символов.

EDIT: исправлены опечатки (пропущено несколько +: s).

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

+ (Конкатенация строк)

Оператор в строковом выражении объединяет два или более символьные или двоичные строки, столбцы, или сочетание строк и столбца имена в одном выражении (строка оператор).

Выражение - это любой действительный Microsoft® SQL Server ™ Выражение любого из типов данных в символьный и двоичный тип данных категория, кроме изображения, ntext или текстовые типы данных. Оба выражения должны быть того же типа данных, или один выражение должно быть в состоянии быть неявно преобразуется в тип данных другого выражения.

Итак ... Нет неявного преобразования int в строку ... Это внутренний вопрос

1 голос
/ 25 августа 2009

Я не говорю, что это определенно будет работать, и я не рядом с моей студией управления sql, чтобы попробовать это перед публикацией, но вы пробовали что-то вроде этого:

@SQL = @SQL + 'Where ID = ' + @SomeID
EXEC(@SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...