C# @searchBySomething中的单引号加上两个单引号,例如REPLACE(@searchBySomething,“,”),以帮助防止简单的注入攻击。print@sql以查看发生了什么。这种代码在各种级别上都很糟糕。阅读Xedni的答案并接受它。@s
C# @searchBySomething中的单引号加上两个单引号,例如REPLACE(@searchBySomething,“,”),以帮助防止简单的注入攻击。print@sql以查看发生了什么。这种代码在各种级别上都很糟糕。阅读Xedni的答案并接受它。@s,c#,sql-server,tsql,dynamic-sql,C#,Sql Server,Tsql,Dynamic Sql,@searchBySomething中的单引号加上两个单引号,例如REPLACE(@searchBySomething,“,”),以帮助防止简单的注入攻击。print@sql以查看发生了什么。这种代码在各种级别上都很糟糕。阅读Xedni的答案并接受它。@squillman如果实际的列名是数据,如错误消息所示,那么问题不是该列不存在。问题是试图解析。。。其中列=…。正如维吉尔所指出的,QuoteName至少应该允许在解析阶段取得更多的成功。(还有一个特别的呼喊声!)嗨,谢谢,我复制了代码,但仍然是
@searchBySomething中的单引号加上两个单引号,例如
REPLACE(@searchBySomething,“,”)
,以帮助防止简单的注入攻击。print@sql
以查看发生了什么。这种代码在各种级别上都很糟糕。阅读Xedni的答案并接受它。@squillman如果实际的列名是数据,如错误消息所示,那么问题不是该列不存在。问题是试图解析。。。其中列=…
。正如维吉尔所指出的,QuoteName
至少应该允许在解析阶段取得更多的成功。(还有一个特别的呼喊声!)嗨,谢谢,我复制了代码,但仍然是同一个错误,因为我显式地抛出了一个。如果传递的是无效列if not error,您希望它做什么?恕我直言,这个错误是合法的,这只是说明了为什么,以及如果您选择的话,您可以如何检查它是否有不同的行为。这只是一个很好答案的旁注-我知道这来自OP的原始代码-@表
,@列
应该是类型,而不是nvarchar(30)
。您好,谢谢。我复制了代码,但仍然是同一个错误,因为我显式地抛出了一个错误。如果传递的是无效列if not error,您希望它做什么?恕我直言,这个错误是合法的,这只是说明了为什么,以及如果你选择的话,你可以如何检查它的不同行为。这只是一个很好答案的旁注-我知道这来自OP的原始代码-@table
,@column
应该是类型,而不是nvarchar(30)
。
ALTER PROCEDURE [dbo].[userDetailsDisplay]
@table NVARCHAR(30),
@column NVARCHAR(30),
@searchBySomething NVARCHAR(30)
DECLARE @sql NVARCHAR(100)
SET @sql = 'SELECT * FROM ' + @table + ' WHERE ' + @column + ' = ' + @searchBySomething
EXECUTE sp_executesql @sql
if not exists
(
select 1
from sys.columns
where object_id = object_id(@table)
and name = @column
)
begin
raiserror('Column %s does not exist in table %t', 16, 1, @column, @table)
return
end
create procedure [dbo].[userDetailsDisplay]
@table nvarchar(30),
@column nvarchar(30),
@searchBySomething nvarchar(30)
as
begin
declare
@sql nvarchar(max),
@params nvarchar(1000)
if not exists
(
select 1
from sys.columns
where object_id = object_id(@table)
and name = @column
)
begin
raiserror('Column %s does not exist in table %t', 16, 1, @column, @table)
return
end
select @sql = '
select *
from ' + quotename(@table) + ' WHERE ' + quotename(@column) + ' = @searchBySomething'
execute sp_executesql
@stmt = @sql,
@params = '@searchBySomething nvarchar(30)',
@searchBySomething = @searchBySomething
end