-1

SQL Serverでユーザー定義関数を定義しました。例えば:クエリで変数を変更してユーザー定義関数を変更する方法

select dbo.SumItems(1 , 2)3

select dbo.MaxItems(5 , 3)5

を返し、他のいくつかの機能が複雑かもしれ戻ります。 また、私はテーブルに変数とその数式表現を保つ:

IdVar Title Formula 
----- ----- --------------------- 
1  Sum dbo.SumItems(@a , @b) 
2  Max dbo.maxItems(@a , @b) 

私は別のテーブルに私のパラメータがあります。

a b 
-- -- 
1 2 
5 3 

は今、私はこの2つのテーブルを結合し、次の結果を取得したいです

Parameter a Parameter b Variable Title Result 
----------- ----------- -------------- ------ 
1    2   Sum    3 
1    2   Max    2 
5    3   Sum    8 
5    3   Max    5 

私は別のビューhereから私の問題を尋ねました。

+0

SQLクエリはように設計されていませんこれを行う。これは、カーソルが最良のアプローチである場合の1つです。 –

+0

カーソル?もっと説明できますか? – Behnam

+0

これは現実世界のニーズですか?あなたは何を達成しようとしていますか?私はかなり確信している、これにはより良い方法がある... – Shnugo

答えて

1

この昨日と非常に似たものを投稿しました。ご存じのように、このような機能は動的SQLでのみ実行できます。

今、私はあなたの機能を持っていないので、それらを提供する必要があります。

私は以下の多数の収入/バランスシートのために1回のパスでの比率のシリーズを計算するために過去に

を非常によく似た何かをやったが一つの方法です。 (ただし、私は2つのパラメータを掘っていないよ...少し限られたようだが、私はあなたが、必要に応じて拡張することができると確信してい)

Declare @Formula table (ID int,Title varchar(25),Formula varchar(max)) 
Insert Into @Formula values 
(1,'Sum'  ,'@[email protected]') 
,(2,'Multiply','@a*@b') 

Declare @Parameter table (a varchar(50),b varchar(50)) 
Insert Into @Parameter values 
(1,2), 
(5,3) 

Declare @SQL varchar(max)='' 
;with cte as (
Select A.ID 
     ,A.Title 
     ,ParameterA = A 
     ,ParameterB = B 
     ,Expression = Replace(Replace(Formula,'@a',a),'@b',b) 
From @Formula A 
Cross Join @Parameter B 
) 
Select @SQL = @SQL+concat(',(',ID,',',ParameterA,',',ParameterB,',''',Title,''',(',Expression,'))') From cte 
Select @SQL = 'Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,ParameterA,ParameterB,Title,Value)' 
Exec(@SQL) 

-- Optional To Trap Results in a Table Variable 
--Declare @Results table (ID int,ParameterA varchar(50),ParameterB varchar(50),Title varchar(50),Value float) 
--Insert Into @Results Exec(@SQL) 
--Select * from @Results 

戻り

ID ParameterA ParameterB Title  Value 
1 1   2   Sum   3 
2 1   2   Multiply 2 
1 5   3   Sum   8 
2 5   3   Multiply 15 
関連する問題