Сценарий:
Необходимо передать 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.