SQL服务器更新某些行的动态列

时间:2016-06-26 11:24:17

标签: sql sql-server

我有以下数据

 DECLARE @SEATCAT NVARCHAR(MAX) = N'GEN'
 DECLARE @PROG NVARCHAR(MAX) = N'U03'
 declare @sql1 nvarchar(max)

 begin
 declare @sql nvarchar(max)
 set @sql = 'Update SHEAT SET [' + @SEATCAT + '] = [' + @SEATCAT + ']-1 Where PROGRAM='' + P01 +''';     
 exec sp_executesql @sql
 end

 Select GEN FROM SHEAT Where PROGRAM=@PROG;`

我想: 用户执行存储过程setQuota参数@PROGRAM说P02,有些@category说GNF。

结果应该是: 将该类别的计划价值减一。 也就是说,对于P02,GNF将是1

我有以下代码

{{1}}

我收到错误:

1 个答案:

答案 0 :(得分:1)

您缺少引号,并且正在使用P01之类的变量,但它尚未定义。你的意思是写@PROG所以它就像是

Where PROGRAM=''' + @PROG + ''';

进一步说明:如果这些变量中的任何一个来自用户输入(例如某人输入),那么您应该真正研究SQL Injection攻击,因为您可能允许通过此过程运行任意代码