使用t-sql将可执行字符串的一部分存储为变量

时间:2014-04-30 19:07:36

标签: sql sql-server string tsql

而不是

WHERE foo = 'one' and bar = 'two'

我想将其中的部分内容存储在一个变量中,以便轻松更改WHERE子句

DECLARE @var VARCHAR(50)
SET @var = "foo = 'one' and bar = 'two'"
...
...
WHERE @var

这种表示法不起作用,但我认为这表明我正在尝试做什么。有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

如果你想构建动态where子句,你最好使用动态sql。

请查看以下文章:Dynamic SQL

此文章:Another Article...

这是一个简单的动态SQL代码示例:

这是一个使用动态SQL来确定要订购的内容的SP:

create procedure GetCustomers
    @OrderByField nVarchar(50),
    @OrderByDirection nVarchar(4)
as
begin

declare @strSQl nvarchar(200)

set @strSQL = 'Select firstname, lastname from customer order by ' + @OrderByField + ' ' + @OrderByDirection 

exec sp_execute @strSQL

end

然后你可以运行它:

exec GetCustomers 'lastname','desc'

这将返回所有按姓氏desc

订购的客户

答案 1 :(得分:0)

如果你想进入动态sql路由,试试这个:

declare @foo varchar(10)
        ,@bar varchar(10)
        ,@sql varchar(max)

select @foo = 'one'
        ,@bar = 'two'


SET @sql = '

    SELECT 
        ...
    FROM myTable 
    WHERE foo = ''' + @foo + ''' 
    AND bar = ''' + @bar + '''
'

EXEC (@SQL)