14

execの中で使用する必要があります。selectexec のクエリは、select 句が使用されているテーブルの列に従って作成されます。私がやりたいことは、次のようなものです:

 SELECT distinct 
     MTMain.[TableName],
     MTMain.[TableFKey], 
     (select IsActive (exec GetStringForIsActive MTMain.[TableName],MTMain.[TableFKey]))
 FROM
     [MasterTableForLanguage] MTMain

GetStringForIsActiveから選択したすべての行に対して実行するストアド プロシージャを次に示しますMasterTableForLanguage
は、次の文字列を実行するためにstored procedure使用されますEXEC

select IsActive from [TableName] where PKID= cast([TableFKey] as int)

TableName と TableFKey は、ストアド プロシージャの入力になります。

4

3 に答える 3

2

ストアド プロシージャ GetStringForIsActive を変更して TableName、TableFKey、および IsActive を返すことができる場合は、カーソルを使用して行ごとに実行し、結果を一時テーブルに追加できます。

すなわち:

exec GetStringForIsActive 'TableName', 'TableFKey'
returns
select [TableName], [TableFKey], IsActive from [TableName] where PKID= cast([TableFKey] as int)

コードは次のようになります。

declare @TableName nvarchar(50)
declare @TableFKey nvarchar(50)
declare @Results table (TableName nvarchar(50), TableFKey nvarchar(50), IsActive bit)

declare TableCursor cursor fast_forward for
   select TableName, TableFKey from MasterTableForLanguage

open TableCursor

fetch next from TableCursor into @TableName, @TableFKey

if @@FETCH_STATUS <> -1
   print 'MasterTableForLanguage check'

while (@@FETCH_STATUS <> -1)
begin


   insert into @Results
   exec GetStringForIsActive @TableName, @TableFKey

   fetch next from TableCursor into @TableName, @TableFKey

end
close TaleCursor
deallocate TableCursor

select * from @Results
于 2012-06-27T10:12:04.000 に答える
0

SELECT 句でストアド プロシージャの代わりに関数を使用します。

編集:

その関数を作成します

CREATE FUNCTION function1 (@TableName nvarchar(10),@TableFKey nvarchar(10))
RETURNS nvarchar(100) AS  
BEGIN 
    -- do whatever here
END

それから

SELECT distinct 
     MTMain.[TableName],
     MTMain.[TableFKey], 
     function1(MTMain.[TableName],MTMain.[TableFKey])
 FROM
     [MasterTableForLanguage] MTMain

これは理にかなっていますか?

于 2012-06-27T09:24:46.843 に答える