这可能很容易解决,但是我似乎看不到问题所在。
错误如下:
消息102,级别15,状态1,第30行
'TTP ID'附近的语法不正确。消息137,级别15,状态2,第36行
必须声明标量变量“ @TransPeriodID”。
这是脚本:
create procedure [dbo].[InsertPayrollTransactions]
@TransPeriodID int,
@PayrollID int,
@TableCode int
as
begin
DECLARE @SQLString NVARCHAR(MAX)
DECLARE @ParmDefinition NVARCHAR(500)
IF @TableCode > 5 OR @TableCode < 0
BEGIN
SET @TableCode = 0
END
SELECT @SQLString =
'INSERT INTO [dbo].[TA Payroll Transactions' + CASE @TableCode
WHEN 0 THEN ''
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
WHEN 5 THEN '5'
END + '] ([TTP ID], [Payroll ID])
VALUES (@TransPeriodID, @PayrollID)'
SET @ParmDefinition = N'([TTP ID] int, [Payroll ID] int)'
-- PRINT @SQLString
EXECUTE sp_executesql @SQLString,
@ParmDefinition,
@TransPeriodID = @TransPeriodID,
@PayrollID = @PayrollID
end
我执行此操作的方式有所不同(不使用动态SQL),但一位同事建议这样做。他为我提供了一个类似脚本的示例,该示例工作正常,但显然在将其应用于此脚本时出现了错误。我试图比较我可能错过了什么(逗号或撇号)但无济于事的地方。
在使用动态SQL之前,请阅读sp_executesql。错误使用会导致更多的问题,而不是带来好处,并且可能会导致SQL注入攻击。
sp_executesql [@stmt =]语句[{,[@params =]
N'@ parameter_name数据类型[OUT | 输出] [,... n]'}
{,[@ param1 =]'value1'[,... n]}]
您需要设置参数:
/* Yours */
SET @ParmDefinition = N'([TTP ID] int
, [Payroll ID] int)'
/* Correct */
SET @ParmDefinition = N'@TransPeriodID INT
, @PayrollID INT';
EXECUTE [dbo].[sp_executesql]
@SQLString
,@ParmDefinition
,@TransPeriodID
,@PayrollID;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句