在sql中使用sql变量作为where子句

时间:2014-03-12 14:16:49

标签: sql-server tsql where-clause

我想这样做:

DECLARE @str varchar(max) 
DECLARE @cnt bigint    
set @str= 'where column=value'
set @cnt= (select count(*) from user+@str)

但是where子句不起作用。没有错误,但它会忽略where条件。

3 个答案:

答案 0 :(得分:2)

我之前曾建议在EXEC()中包装您的最后一行,但您无法执行此操作并将结果返回给变量。为此,请使用以下代码替换最后一行:

create table #temp (theCount int)
insert into #temp EXEC('select count(*) from Photos '+@str)
set @cnt= (select top 1 theCount from #temp)
drop table #temp

答案 1 :(得分:1)

检查下面的代码,在你的情况下条件是动态的,所以你需要动态的sql。

DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @str nvarchar(500);
set @str= 'where column=value'  
SELECT @sSQL = N'SELECT @retvalOUT = COUNT(*) FROM user '+ @str +' '  ;  
SET @ParmDefinition = N'@retvalOUT int OUTPUT';
EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;
SELECT @retval;

答案 2 :(得分:0)

使用execute sql语法http://technet.microsoft.com/en-us/library/ms188001.aspx

希望这能解决您的问题