SQL Server |我的存储过程没问题吗?

标签 sql sql-server stored-procedures

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/

相关文章:

python - 如何查询两个表,表1中的某些项与表2没有关联?

c# - 将 UTF8 字符串保存到 SQL Server

MySql 安排事件

sql - Count distinct where 属性是任一键

mysql - 如何排序 LEFT JOIN 的结果

MySQL 不带子查询的不同总和

c# - 验证登录用户新输入的密码

sql-server - 无法从 Kubernetes 连接到本地主机上托管的 SQL Server 数据库,如何调试?

mysql - 如何修复过程 SQL 中的错误?

java - 我使用了cursor_loop : loop in sql stored procedure its not fetching all 15 rows it fetch one row only