2014-03-12 37 views
0

條款我想這樣做:使用SQL變量,其中SQL

DECLARE @str varchar(max) 
DECLARE @cnt bigint  
set @str= 'where column=value' 
set @cnt= (select count(*) from [email protected]) 

但在where子句中是行不通的。沒有錯誤,但它會忽略哪裏的條件。

+1

這個問題,即一些缺陷看一看強調了答案:http://stackoverflow.com/questions/548090/dynamic-sql-execsql-versus-exec-sp-executesqlsql –

回答

2

我以前建議將最後一行換成EXEC(),但是你不能這樣做並將結果返回給一個變量。要做到這一點,請使用以下的地方你的最後一行:

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

越來越此錯誤:關鍵字'EXEC'附近的語法不正確。 爲您的線路 – user3410589

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, @[email protected] OUTPUT; 
SELECT @retval;