Escenario: necesidad de pasar n argumentos a un procedimiento almacenado. Uno de los argumentos es del tipo varchar(x)
. Ese argumento varchar necesita construirse a partir de un puñado de otras variables varchar. Este problema utiliza SQL Server 2005, pero este comportamiento se aplica a todas las versiones de SQL Server.T-SQL: no se puede pasar como argumento cadena concatenada a procedimiento almacenado
Configuración:
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 + '".'
Esto produce la excepción en SQL Server: Incorrect syntax near '+'
. Normalmente, puede pensar que el tipo de datos sería incorrecto (es decir, las variables son de tipos diferentes, pero eso produciría un mensaje de error diferente).
Aquí hay una aplicación correcta que compila sin error:
SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';
EXEC DoSomeWork @ID, @MyString
Pregunta: qué es lo que T-SQL no puede manejar la concatenación de un varchar como un argumento? Conoce los tipos, ya que fueron declarados adecuadamente como varchar.
El sitio web al que se hace referencia en este comentario ya no está activo. – Buggieboy
Gracias. He actualizado los enlaces para usar MSDN. – SurroundedByFish