这是我的代码:
DECLARE @SQL varchar(600)
SET @SQL =
'SELECT CategoryID, SubCategoryID, ReportedNumber
FROM tblStatistics
WHERE UnitCode = ' + @unitCode +
' AND FiscYear = ' + @currYEAR
EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)
当我使用unitCode ='COB'和currYEAR ='10'运行此sproc时,我收到以下错误:
Invalid column name 'COB'.
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?
谢谢!
那是一个很好的SQL注入漏洞.
首先使用绑定参数以这种方式重写:
DECLARE @SQL nvarchar(4000)
SET @SQL =
'SELECT CategoryID, SubCategoryID, ReportedNumber ' +
'FROM tblStatistics ' +
'WHERE UnitCode = @UnitCode ' +
'AND FiscYear = @CurrYear'
EXEC sp_executesql
@SQL,
'@UnitCode varchar(10), @CurrYear int',
@UnitCode = 'COB',
@FiscYear = 10
Run Code Online (Sandbox Code Playgroud)
您需要在SQL中的值周围加上引号:
'SELECT CategoryID, SubCategoryID, ReportedNumber
FROM tblStatistics
WHERE UnitCode = ''' + @unitCode +
''' AND FiscYear = ''' + @currYEAR + ''''
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |