C# 带有存储过程的动态SQl
如何将sp_executesql与动态值参数一起使用 我想通过循环从逗号分隔的字符串或类似的内容生成参数值C# 带有存储过程的动态SQl,c#,sql-server-2008,C#,Sql Server 2008,如何将sp_executesql与动态值参数一起使用 我想通过循环从逗号分隔的字符串或类似的内容生成参数值 declare @sql nvarchar(1000), @answer nvarchar(1000) set @sql='SELECT TOP 1000 [UserID] ,[DateOfBirth] ,[UserActivityType] ,[FirstName] ,[LastName] ,[Gender] FROM [
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
请注意,可以有两个以上的参数
有什么想法吗?
谢谢。试试这个
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
使用字符串连接传递参数您知道sp_executesql的整个要点是阻止您进行字符串连接。您可以使用linq之类的库为您动态生成查询,然后使用sp_Executesql
在SQL查询中,字符串连接是对网站和应用程序SQL攻击的一种关键攻击向量。p> 您需要将CSV字符串的值解析为不同的变量,然后传递给sp_executesql-当您这样做参数化SQL时(这正是您应该做的),没有办法解决这个问题
否则,您将考虑对动态SQL执行(可怕的)字符串连接,而不是参数化,这将是不好的;升降台--代码>我不会投反对票,因为这是一个有效的答案,但这是一个糟糕的想法,谢谢Spence是的,这是一个很大的错误,你能告诉我怎么做吗?我的意思是如何在运行中创建多个参数?因为可能会有1到10个你知道这是一个动态的非常感谢。