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.