我有一個字符串variabled聲明爲使創建T-SQL:如何從一個字符串
declare @myGeniuses as nvarchar(8000);
set @myGeniuses = ' in (1,2,3)';
我想申請我的變量在SELECT語句中,像這樣:
select * from GENIUSES where GeniusId @myGeniuses
我有一個字符串variabled聲明爲使創建T-SQL:如何從一個字符串
declare @myGeniuses as nvarchar(8000);
set @myGeniuses = ' in (1,2,3)';
我想申請我的變量在SELECT語句中,像這樣:
select * from GENIUSES where GeniusId @myGeniuses
您將需要使用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;
declare @t nvarchar(max)
set @t='select * from GENIUSES where GeniusId'+ @myGeniuses
exec @t
我不能得到這個在SQL2000 – RetroCoder
@RetroCoder工作:SQL Server 2000中沒有一個'爲nvarchar(最大)'type - 使用'nvarchar(4000)'代替。另外:你應該**告訴我們關於你正在使用的SQL Server的版本 - 某些特性在給定版本中是否存在......(並且2000版本絕對不是主流版本) –
你會怎麼做?
exec ('select * from GENIUSES where GeniusId' + @myGeniuses)
這個作品在sql2000中很棒。有沒有辦法讓它認爲字符串實際上是一個t-sql語句? – RetroCoder
你是什麼意思詭計呢? – Rodolfo
我的意思是通過說服命令字符串內的內容是當前命令語句的一部分。也許是演員陣容,或者這是一項安全功能。 – RetroCoder
我需要使用'exec'我真的很想只應用這個之後(其中GeniusId)部分代碼。 – RetroCoder
如果您有這樣的例子,我無法正常工作。 – RetroCoder
這與使用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'; –