Scenariusz: trzeba przekazać n argumentów do procedury przechowywanej. Jednym z argumentów jest typ varchar(x)
. Ten argument varchar musi być zbudowany z kilku innych zmiennych varchar. Ten problem używa programu SQL Server 2005, ale to zachowanie dotyczy wszystkich wersji programu SQL Server.T-SQL: Nie można przejść łączone ciąg jako argument do procedury przechowywanej
Konfiguracja:
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 + '".'
Wytwarza wyjątek w SQL Server: Incorrect syntax near '+'
. Zwykle można by pomyśleć, że typ danych byłby nieprawidłowy (tj. Zmienne są różnych typów, ale wygenerowałoby to inny komunikat o błędzie).
Oto prawidłowe wdrożenie że kompiluje bez błędów:
SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';
EXEC DoSomeWork @ID, @MyString
pytań: Dlaczego jest to, że T-SQL nie może poradzić sobie z konkatenacji varchar jako argument? Zna typy, ponieważ zostały zadeklarowane właściwie jako varchar.
Strona internetowa, o której mowa w tym komentarzu, nie jest już dostępna. – Buggieboy
Dzięki. Zaktualizowałem linki do używania MSDN. – SurroundedByFish