w3schools valores usuario tabla stored salida procedimientos procedimiento por parámetros parametros los linea funciones especifican español entrada ejercicios ejemplos ejemplo ejecutar definidas cómo crear con basicas almacenados almacenado sql sql-server sql-server-2005 tsql casting

valores - procedimientos almacenados sql ejemplos



¿Utiliza el resultado de una expresión(por ejemplo, llamada de función) en una lista de parámetros de procedimiento almacenado? (6)

Intento escribir un procedimiento almacenado para ayudar con el desarrollo de nuestra base de datos, pero estoy teniendo problemas para usarlo. Por ejemplo:

DECLARE @pID int; SET @pID = 1; EXEC WriteLog ''Component'', ''Source'', ''Could not find given id: '' + CAST(@pID AS varchar);

Esto produce el error (en SQL Server 2005)

Msg 102, nivel 15, estado 1, línea 4 Sintaxis incorrecta cerca de ''+''.

¿Puede alguien explicarme por qué mi sintaxis es incorrecta y la forma correcta de resolver este problema?


No puede hacer operaciones en los parámetros de un procedimiento almacenado. Debe asignar ese valor a otra variable y luego pasarlo a su SP.

DECLARE @pID int, @nameId VARCHAR(100); SET @pID = 1; SET @nameId = ''Could not find given id: '' + CAST(@pID AS varchar); EXEC WriteLog ''Component'', ''Source'', @nameId


Pruebe esto en su lugar ...

DECLARE @pID int; SET @pID = 1; DECLARE @message varchar(255); SET @message = ''Could not find given id: '' + CAST(@pID AS varchar) EXEC WriteLog ''Component'', ''Source'', @message;


Tal vez algo como esto?

DECLARE @pID int; SET @pID = 1; DECLARE @Message NVARCHAR(50); SET @Message = ''Could not find given id: '' + CAST(@pID AS varchar) EXEC WriteLog ''Component'', ''Source'', @Message;


DECLARE @pID int; declare @IdAsString varchar(100) SET @pID = 1; Select @IdAsString =''Could not find given id: '' + Cast(@pId as varchar(10)) EXEC WriteLog ''Component'', ''Source'', @IdAsString

Como lo señaló Martin, lo siguiente solo se aplica a columnas no variables.

Tenga en cuenta que he modificado su varchar(10) a varchar(10) esto permitirá enteros de más de 1 dígito. varchar solo permitirá 1 caracter


DECLARAR @id int

SET @id = 10

SELECT LTRIM (RTRIM (STR (@id))) AS stringValue


Necesitas usar una variable intermedia. SQL Server no es compatible con este tipo de operación en la lista de parámetros, aunque ha estado en la lista TODO durante algunos años. (Consulte Conectar elemento: Usar funciones escalares como parámetros de procedimiento almacenados )

La gramática para EXEC es

[ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] } [;]

La documentación actualmente no es tan clara en un formato aceptable de value pero parece ser solo expresiones "simples" como valores literales o funciones de sistema con prefijo @@ (como @@IDENTITY ). No se permiten otras funciones del sistema, como SCOPE_IDENTITY() (incluso aquellas que no requieren paréntesis, como CURRENT_TIMESTAMP , no están permitidas).

Entonces, por el momento, necesita usar sintaxis como la siguiente

DECLARE @pID INT; SET @pID = 1; /*If 2008+ for previous versions this needs to be two separate statements*/ DECLARE @string VARCHAR(50) = ''Could not find given id: '' + CAST(@pID AS VARCHAR(11)) EXEC WriteLog ''Component'', ''Source'', @string