2016-12-23 6 views
-1

私は、1つのパラメータallowayを持つ手続きを持っています@AssetID int他のテーブルのパラメータを使用してストアドプロシージャを実行します。

私は、この手順のためのパラメータとしてその値を使用し、別のテーブルから列値を選択します。

私はこのような手順で何かを保存した、テーブルが@AssetIDパラメータから「どこで」基準でフィルタリングされています。だから私は、例えば、他のプロシージャを作成する必要が

declare @inspectyear as nvarchar(max), @calc as nvarchar(max), @query as nvarchar(max); 

set @inspectyear = STUFF((select distinct ',' + quotename(InspectYear) from ##t2 c 
        for XML path(''), type).value('.','NVARCHAR(MAX)'),1,1,'') 

select @calc = ', ' + quotename(Max(InspectYear)) + ' - ' + quotename(Max(InspectYear)-2) 
     + ' as Calc1, ' + quotename(Max(InspectYear)) + ' - ' + quotename(min(InspectYear)) 
     + ' as Calc2' from #t2; 

set @query = 
';with data as 
(
     select  inspectyear, 
        partno, Pos, number 
     from #t2 
     unpivot 
     (
      number 
      for Pos in ([Pos1], [Pos2], [Pos3], [Pos4]) 
    ) unpvt 
) 
select * ' + @calc + ' into ##temp 
from data 
pivot 
(
     sum(number) 
     for inspectyear in (' + @inspectyear + ') 
) pvt 
order by partno'; 

exec sp_executesql @query = @query; 
select * from ##temp; 
drop table ##temp; 

create procedure spExecmyProc 
as 
begin 
    exec spMyProc '@AssetID' -- <-- The parameter took from other table. 
go 
end 

@dateパラメータは、他のテーブルから取りました。

これは可能ですか?結果は1つの結果に過ぎません。

これまでのところ、これは私がやったことです。それは動作しますが、結果は「1つの結果」にはありません。

declare @AssetID int; 
declare cur CURSOR FOR 
select distinct AssetID from myTable 

open cur 
fetch next from cur into @AssetID 
while @@FETCH_STATUS = 0 
begin 
    exec mySPName @AssetID 
    fetch next from cur into @AssetID 
end 
close cur 
DEALLOCATE cur 

はありがとう:@AssetIDが複数ある場合は1、結果以上のものを作成します。

+1

あなたが変数にそのテーブルから変数、店舗の値を宣言し、ヨーヨーにパラメータとして変数を渡すことができます:AssetId = 5のためだけに1行)とあなたはSP? –

+0

@ shree.pat18、それを行う方法がわかりません。しかし私は私の質問を編集します。 – Haminteu

答えて

0

あなたが達成しようとしていることを理解しているわけではありませんが、AssetIDの各値でいくつかのコードをmytableに実行できるようにしたい場合は、私はあなたがスカラー値関数を使うことができると思います。さんがあなたの元のストアドプロシージャの目的はただ簡単にするために1 AssetId値をインクリメントしたことをふりをしてみましょう - あなたの関数は次のように作成することができます。

:あなたはその後、テーブル内のいくつかの値を持っている場合は

CREATE FUNCTION fnMyFunction (@AssetId INT) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @return INT 
    SET @return = @AssetId + 1 
    RETURN @return 
END 

CREATE TABLE Assets (
    AssetId INT 
) 

INSERT INTO Assets 
SELECT 1 
UNION 
SELECT 2 
UNION 
SELECT 3 
UNION 
SELECT 5 
UNION 
SELECT 7 
UNION 
SELECT 5 

あなたが返すそれぞれの値にあなたの関数を呼び出すことができます上で定義された私の超簡単なデータセットのために、これらの結果を与える

SELECT AssetId, 
     dbo.fnMyFunction(AssetId) AS AssetIdPlus1 
FROM Assets 

/------------------------\ 
| AssetId | AssetIdPlus1 | 
|---------+--------------| 
| 1 |  2  | 
| 2 |  3  | 
| 3 |  4  | 
| 5 |  6  | 
| 7 |  8  | 
| 5 |  6  | 
\------------------------/ 

あなたは自分のテーブルにAssetIdの一意の各値のために結果を取得したい場合は、単にDISTINCT結果を返す:

SELECT DISTINCT 
    AssetId, 
    dbo.fnMyFunction(AssetId) 
FROM Assets 

上記と同じデータセットのこれらの結果を与えることになります(

/------------------------\ 
| AssetId | AssetIdPlus1 | 
|---------+--------------| 
| 1 |  2  | 
| 2 |  3  | 
| 3 |  4  | 
| 5 |  6  | 
| 7 |  8  | 
\------------------------/ 
+0

問題は、ここで私のSpは長すぎて提供することができないということです。これは、ピボットクエリからの動的な結果です。だから私は "AssetID"を一つずつ取得して一つの結果にする必要があります。 – Haminteu

+0

現在のストアドプロシージャーの長さや複雑さに関係なく、入力と出力の性質を私たちに説明したり、解決しようとしている全体的な問題について説明したりできますこれを達成する最善の方法であるかどうかを示唆しています。 – 3N1GM4

+0

@Haminteu - 私はあなたとチャットでこれについて議論することができます(http://chat.stackexchange.com/rooms/50591/execute-stored-procedure-with-parameter-from-other-table)やりたい – 3N1GM4

関連する問題