CREATE PROCEDURE spCountTableRowWHere
@TblName VARCHAR(50),
@TblID VARCHAR(10) = 'Id',
@WhereClause NVARCHAR(500) = '1=1'
AS
BEGIN
DECLARE @Query NVARCHAR(500)
DECLARE @ParamDefinition NVARCHAR(40)
DECLARE @Count INT
SET @Query = 'SELECT @C = COUNT('+@TblID+') FROM '+@TblName+' WHERE '+@WhereClause
SET @ParamDefinition = '@C INT OUTPUT'
EXECUTE SP_EXECUTESQL @Query, @ParamDefinition, @C = @Count OUTPUT
SELECT @Count
END
我想知道这种过程是否比针对不同表的单独过程更好。
最佳答案
简短的回答是否定的。
长的答案是,这是 SQL 注入(inject)攻击的漏洞。
想象一下如果有人将以下字符串放入您的 where 子句参数中会发生什么: 1=1;删除表 myTable
。
关于SQL Server |我的存储过程没问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096492/