有人可以向我解释我在这个查询中出错的地方吗?将参数插入@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
我错过了什么吗?我无法确定任何问题,为什么这不起作用。是否有规则说明您无法指定要搜索的内容以及同一查询中的哪一列?
答案 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。