选择WHERE @where = @term返回空行

时间:2014-05-07 15:10:07

标签: sql sql-server

有人可以向我解释我在这个查询中出错的地方吗?将参数插入@where@term会使其正常工作,但在我的asp.net应用程序的上下文中,需要参数才会失效。

我有一个分析器正在观察服务器,这是在使用激活此查询的界面时发生的情况:

exec sp_executesql N' 
    SELECT 
        CC,  simNumber,  Voice,  IMSI,  Network,  SOA,  
        Customer, Description,  partNumber,  serialNumber,  Contract,  issueDate,  
        expiryDate,  Datagate, status,  originalSheet,  originalRow  
    FROM tblViews  
    WHERE @where = @term ',N'@where nvarchar(3),@term nvarchar(5)',@where=N'SOA',
        @term=N'64367'
go

我错过了什么吗?我无法确定任何问题,为什么这不起作用。是否有规则说明您无法指定要搜索的内容以及同一查询中的哪一列?

1 个答案:

答案 0 :(得分:2)

您的查询语法格式错误,更具体地说:

WHERE @where = @term
--    ^^^^^^
--   this bit

变量(例如@where@term)只能包含值(因此您对@term的特定用法是正确的),但不包含表名,列名,SQL语法等。(因此你对@where的特殊使用是不正确的。)

在Google或Stack Overflow中搜索“动态SQL ”,这是您要尝试执行的操作的名称。我推荐用于SQL Server的一个资源是Erland Sommarskog's article, "Dynamic Search Conditions in T-SQL"

Dynamic SQL存在各种缺陷。值得特别提及的是一种安全问题的可能性,即所谓的SQL injection attacks。因此,请务必在不引入安全问题的情况下查看the section that shows how to combine dynamic SQL query text and variables