T-SQL: невозможно передать каскадную строку в качестве аргумента хранимой процедуре

Scenario: Need to pass n аргументы хранимой процедуры. Один из аргументов имеет типvarchar(x), Этот аргумент varchar должен быть построен из нескольких других переменных varchar. Эта проблема использует SQL Server 2005, но это относится ко всем версиям SQL Server.

Setup:

<code>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 + '".'
</code>

Это создает исключение в SQL Server:Incorrect syntax near '+', Как правило, вы можете подумать, что тип данных будет неправильным (т.е. переменные имеют разные типы, но это приведет к другому сообщению об ошибке).

Вот правильная реализация, которая компилируется без ошибок:

<code>SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';

EXEC DoSomeWork @ID, @MyString
</code>

Question: Why Неужели T-SQL не может обрабатывать конкатенацию varchar в качестве аргумента? Он знает типы, так как они были правильно объявлены как varchar.

Ответы на вопрос(3)

Ваш ответ на вопрос