1

如何将存储过程中的两个 SQL 参数传递给 WHERE 子句中的查询字符串?我遇到的问题在@iField 中。如果我删除它并用 InfoID LIKE '%' + @iSearch + '%' 替换,它可以工作,但我需要添加@iField。

WHERE CustomerID = @CustomerID AND @iField LIKE '%' + @iSearch + '%'

4

3 回答 3

1

只要您已经使用程序

Declare @Query nvarchar(max)
Select @Query=
'
Select * from dbo.Invoice
WHERE CustomerID = '+Cast(@CustomerID as Varchar(20)) 
+' AND ['+ @iField +'] LIKE ''%' + @iSearch + '%''
'

--Print @Query
Exec(@Query)
于 2013-04-05T16:04:20.880 回答
0

T-SQL 不允许您用变量替换对象名称(虽然它会很方便,但不会)。真的有两个选择:

1) 使用动态 SQL 例如 sp_executesql ( http://www.techrepublic.com/blog/datacenter/generate-dynamic-sql-statements-in-sql-server/306 )

或者

2) 使用 IF...ELSE 例如

IF @iField = 'InfoId'
     SELECT ...
     WHERE CustomerID = @CustomerID AND InfoId LIKE '%' + @iSearch + '%'
ELSE IF @iField = '<some other field>'
     SELECT ...
     WHERE CustomerID = @CustomerID AND <some other field> LIKE '%' + @iSearch + '%'
etc.
于 2013-04-05T15:56:44.267 回答
0

如果我理解正确,您只是想将like运算符限制为特定列?

declare @yourTable table (i int, FirstName varchar(10), LastName varchar(10))
insert into @yourTable
    select 1, 'john', 'doe' union all
    select 2, 'jane', 'doe';


declare @iField varchar(10),
        @iSearch varchar(10);


select  @iField = 'FirstName',
        @iSearch = 'j'


select  *
from    @yourTable
where   (@iField = 'FirstName' and FirstName like '%' + @iSearch + '%') or
        (@iField = 'LastName' and LastName like '%' + @iSearch + '%')
于 2013-04-05T15:57:46.240 回答