さまざまな長さのパラメーター(および他のパラメーター)を受け取ることができるユーザー定義関数を作成できるかどうか疑問に思いました。
基本的に、IN
ステートメントで使用されるパラメーターを渡したいと思います。私がやりたいのは、次のようなものです。
CREATE FUNCTION ufnGetOpenNotificationValue
(@LegacyTypeID INT,
@MonthEnd DATE,
@YearStart DATE,
@YearEnd DATE)
@LegacyTypeID
整数のリストはどこにありますか。
したがって、関数を使用すると、次のようになります。
SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
((1,2,3),'2014-07-31','2013-09-01','2014-08-31')
のではなく
SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
(1,'2014-07-31','2013-09-01','2014-08-31') +
RE_Auxiliary.dbo.ufnGetOpenNotificationValue
(2,'2014-07-31','2013-09-01','2014-08-31') +
RE_Auxiliary.dbo.ufnGetOpenNotificationValue
(3,'2014-07-31','2013-09-01','2014-08-31')
しかし、複数の整数を渡そうとすると、次のようなエラーが発生します。
Incorrect syntax near ','
Alex Kが述べているように、SQL関数の入力として配列を渡すことはできません。テーブルタイプを渡すことができます(パラメータとしてテーブルを渡します)。
CREATE TYPE TableType
AS TABLE (LegacyTypeID INT)
CREATE FUNCTION ufnGetOpenNotificationValue
(@LegacyTypeID TableType,
@MonthEnd DATE,
@YearStart DATE,
@YearEnd DATE)
...
WHERE COLUMN_NAME IN (SELECT LegacyType FROM @LegacyTypeID)
次に、その変数をパラメーターとして渡して関数を呼び出す前に、TableType変数に挿入する必要があります。
もう1つのオプションは、リストをコンマ区切りの値のリストとして渡すことです。次に、where句で使用する関数(このような関数)を使用します
CREATE FUNCTION ufnGetOpenNotificationValue
(@LegacyTypeID NVARCHAR(256),
@MonthEnd DATE,
@YearStart DATE,
@YearEnd DATE)
...
WHERE COLUMN_NAME in (SELECT val FROM dbo.f_split(@StringParameter, ','))
次に、次のように呼び出すことができます。
SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
('1,2,3','2014-07-31','2013-09-01','2014-08-31')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加