2012-05-23 38 views
0

我有一個字符串variabled聲明爲使創建T-SQL:如何從一個字符串

declare @myGeniuses as nvarchar(8000); 
set @myGeniuses = ' in (1,2,3)'; 

我想申請我的變量在SELECT語句中,像這樣:

select * from GENIUSES where GeniusId @myGeniuses 

回答

1

您將需要使用sp_execu tesql來實現這個結果,它可以讓你將查詢語句作爲字符串傳遞並執行。

有關詳細信息,請參閱本:http://msdn.microsoft.com/en-us/library/ms188001.aspx

用法示例:

DECLARE @sql AS NVARCHAR(MAX); 
DECLARE @filter AS NVARCHAR(500); 
SET @filter = ' in (1,2,3)'; 
SET @sql = 'select * from GENIUSES where GeniusId' + @filter; 
EXECUTE sp_executesql @sql; 
+0

我需要使用'exec'我真的很想只應用這個之後(其中GeniusId)部分代碼。 – RetroCoder

+0

如果您有這樣的例子,我無法正常工作。 – RetroCoder

+1

這與使用EXEC語句相似:'DECLARE @sql AS NVARCHAR(MAX); DECLARE @filter AS NVARCHAR(500); SET @filter ='in(1,2,3)'; SET @sql ='select * from GENIUSES where GeniusId'+ @filter; EXECUTE sp_executesql @ sql'; –

1
declare @t nvarchar(max) 
set @t='select * from GENIUSES where GeniusId'+ @myGeniuses 

exec @t 
+0

我不能得到這個在SQL2000 – RetroCoder

+1

@RetroCoder工作:SQL Server 2000中沒有一個'爲​​nvarchar(最大)'type - 使用'nvarchar(4000)'代替。另外:你應該**告訴我們關於你正在使用的SQL Server的版本 - 某些特性在給定版本中是否存在......(並且2000版本絕對不是主流版本) –

1

你會怎麼做?

exec ('select * from GENIUSES where GeniusId' + @myGeniuses) 
+0

這個作品在sql2000中很棒。有沒有辦法讓它認爲字符串實際上是一個t-sql語句? – RetroCoder

+0

你是什麼意思詭計呢? – Rodolfo

+0

我的意思是通過說服命令字符串內的內容是當前命令語句的一部分。也許是演員陣容,或者這是一項安全功能。 – RetroCoder