如何将sp_executesql与动态值参数一起使用
我想通过逗号分隔字符串或类似
之类的循环生成参数值declare @sql nvarchar(1000), @answer nvarchar(1000)
set @sql='SELECT TOP 1000 [UserID]
,[DateOfBirth]
,[UserActivityType]
,[FirstName]
,[LastName]
,[Gender]
FROM [LogX].[dbo].[UserDetails] where firstname=@name and gender =@gender '
set @values = '"jack","1"'
EXEC sp_executesql @sql , N'@name nvarchar(100),@gender tinyint',@values
请注意,可以有超过2个参数 任何的想法? 感谢。
答案 0 :(得分:0)
试试这个
declare @sql nvarchar(1000), @answer nvarchar(1000)
set @sql='SELECT TOP 1000 [UserID]
,[DateOfBirth]
,[UserActivityType]
,[FirstName]
,[LastName]
,[Gender]
FROM [LogX].[dbo].[UserDetails] where firstname='+@name+' and gender ='+@gender
set @values = '"jack","1"'
EXEC sp_executesql @sql , N'@name nvarchar(100),@gender tinyint',@values
使用字符串连接传递参数
答案 1 :(得分:0)
您知道sp_executesql的整个点是为了防止您进行字符串连接。您可以使用linq之类的库为您动态生成查询,然后使用sp_Executesql。
SQL查询中的字符串连接是针对称为SQL注入的网站和应用程序的关键攻击媒介。 SQL Injection at wikipedia
答案 2 :(得分:0)
您需要将CSV值的字符串解析为不同的变量,然后传递给sp_executesql - 在进行参数化SQL时,没有办法解决这个问题(这正是您应该做的)。
否则,你会考虑为动态SQL做(可怕的)字符串连接,而不是参数化,这会很糟糕。