必须在sql server动态sql中声明标量变量
我在运行sql server存储过程时遇到问题。我使用动态sql。 我得到错误“必须声明标量变量”@EmployeeId” SQL查询必须在sql server动态sql中声明标量变量,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在运行sql server存储过程时遇到问题。我使用动态sql。 我得到错误“必须声明标量变量”@EmployeeId” SQL查询 ALTER PROCEDURE [dbo].[GetLeaveDays] -- Add the parameters for the stored procedure here @LeaveType varchar(5000), @AdminId int, @EmployeeId int AS BEGIN SET NOCOUNT ON; DECLAR
ALTER PROCEDURE [dbo].[GetLeaveDays] -- Add the parameters for the stored
procedure here
@LeaveType varchar(5000),
@AdminId int,
@EmployeeId int
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@queryString nvarchar(MAX);
SET @queryString = 'SELECT ' + @LeaveType + ' FROM CompulsoryLeave WHERE
AdminId = @AdminId AND Id=(SELECT LeaveStructureId FROM Employee WHERE
Id=@EmployeeId)';
EXECUTE sp_executesql @queryString,
N'@AdminId int',
N'@EmployeeId int',
@AdminId = @AdminId,
@EmployeeId=@EmployeeId
END
第二个sp_executesql参数应为包含所有参数定义的单个字符串。请尝试:
EXECUTE sp_executesql @queryString,
N'@AdminId int, @EmployeeId int',
@AdminId = @AdminId,
@EmployeeId = @EmployeeId;
第二个sp_executesql参数应为包含所有参数定义的单个字符串。请尝试:
EXECUTE sp_executesql @queryString,
N'@AdminId int, @EmployeeId int',
@AdminId = @AdminId,
@EmployeeId = @EmployeeId;
虽然您尊重参数的顺序,但可以直接传递值,而不将其设置为参数
..@AdminId,@EmployeeId;
@Sami,确实可以按顺序位置指定参数,而不是使用sp_executesql
(以及任何存储过程)指定参数但是,尽管命名语法更易于维护,特别是当外部引用的命名方式不同时。虽然您尊重参数的顺序,但您可以直接传递值,而不将其设置为参数。@AdminId,@EmployeeId;
@Sami,但确实可以按顺序位置而不是名称指定参数thsp_executesql
(以及任何存储过程)但是,命名语法更易于维护,特别是当外部引用的命名不同时。迫不及待地想获得@LeaveType
。除非需要更有趣的东西,例如表达式,否则您可能希望根据表中的列对其进行验证。如果它是一个列列表,则可以拆分它并验证它em单独。迫不及待地想获得@LeaveType
。除非需要更有趣的内容,例如表达式,否则您可能希望根据表中的列对其进行验证。如果它是一个列列表,则您可以拆分它并单独进行验证。