Сценарий:
Необходимо передать n аргументов хранимой процедуре. Один из аргументов имеет тип varchar(x)
. Этот аргумент varchar должен быть построен из нескольких других переменных varchar. Эта проблема использует SQL Server 2005, но это поведение относится ко всем версиям SQL Server.
Настройка
DECLARE @MyString varchar(500), @MyBar varchar(10), @MyFoo varchar(10)
SELECT @MyBar= 'baz '
SELECT @MyFoo= 'bat '
-- try calling this stored procedure!
EXEC DoSomeWork @MsgID, 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".'
Это создает исключение в SQL Server: Incorrect syntax near '+'
. Как правило, вы можете подумать, что тип данных будет неправильным (т.е. Переменные имеют разные типы, но это приведет к появлению другого сообщения об ошибке).
Здесь правильная реализация, которая компилируется без ошибок:
SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';
EXEC DoSomeWork @ID, @MyString
Вопрос: Почему заключается в том, что T-SQL не может обрабатывать конкатенацию varchar в качестве аргумента? Он знает типы, поскольку они были объявлены правильно как varchar.