2011-11-09 26 views
0

這裏是我的代碼片段:如何店鋪執行可變輸出到另一個變量,SQL

create procedure sp (@pre nvarchar(50), @count nvarchar(50)) 
as 
declare @preval nvarchar(500); 
declare @countval nvarchar(500); 

select @preval = 'select '+ @prefix + ' from tblc' 
select @countval= 'select '+ @counter + ' from tblc' 

exec sp_executesql @preval,@countval 

前和計數是具有2個輸入參數給出「columnsname1」和「columnname2」,它是動態的。我想建立一個查詢/ SP,它給了我特定列內的值,並且我想將它們存儲在我的SP中的2個不同或單個變量中。直到現在我得到列名作爲我不想要的結果,我想要特定列內的值。並且還希望第三個變量的值!如有任何疑問,請告知我。

+2

該過程不起作用:您有參數'@ pre'和'@ count',但在您的過程中使用名稱'@prefix'和'@ counter'。當你解決這個問題時,它會起作用,至少它對我來說是這樣。噢,你使用哪種RDBMS? SQL Server? –

+2

這不是SQL設計工作的方式。不要試圖變得聰明並建立通用代碼。您還無法將記錄集的輸出存儲在SQL注入警告中的計數器 – gbn

回答

2

那麼......假設你的例子是僞代碼,並且不會逐字地工作,你可以從閱讀sp_executesql的工作方式中獲益 - 注意第二個參數是而不是後續執行的命令。

已經這樣做了,你可以嘗試以下操作:

create procedure sp (@prefix nvarchar(50), @counter nvarchar(50)) 
as 
declare @preval nvarchar(500); 
declare @countval nvarchar(500); 
select @preval = 'select '+ @prefix + ' from tblc' 
select @countval= 'select '+ @counter + ' from tblc' 

declare @cmd as nvarchar(500); 
set @cmd = @preval+';'[email protected] 
exec sp_executesql @cmd 

...祈禱有人不這樣做......

sp '1; delete','' 

就個人而言,我會質疑爲什麼你覺得有必要走這條路。

但是,您可能會發現,如果您閱讀了sp_executesql,並查看以下示例,您將找到一種方法來獲取所需內容。我在猜測'tblc'表只有一行?

declare @sql as nvarchar(4000) 
declare @p1 as integer 

set @sql = 'select @p1=count(*) from tblc' 
exec sp_executesql @sql, N'@p1 int output', @p1 output 

select @p1 
+1

+1上,並提問**爲什麼會有人希望這樣做。 –