2016-05-23 13 views
1

SQL Serverでスカラー関数を作成しようとしています。次のように私はselect文を造語している:ここでp_TableName @スカラー関数SQL Server内で動的クエリを実行する

SET @Statement1 = 'SELECT 1 FROM ' + @p_TableName + 
        ' WHERE RegionTypeID = 1 AND RegionID = ' + 
        CONVERT (nvarchar (50), @p_RegionID) 

は、テーブルの名前(データ型はnvarchar(500))であるとp_RegionID @ uniqueidentifierです。

次のように私は今、上記のステートメントを実行しています:

@ReturnValue1はintで
EXEC @ReturnValue1 = @Statement1 

しかし、私は他の場所からこの関数を呼び出すときに、私はこのエラーを取得:

The name 'SELECT 1 FROM [PS].[Availability] WHERE RegionTypeID = 1 AND RegionID = AF4C182C-F751-41AD-AA6A-20A50A7A38C8' is not a valid identifier.

私はスカラー関数内からの動的SQL SELECTステートメントを呼び出すことができる方法を知っておく必要があります。あなたは、出力パラメータを以下のようにSPを作成することができます

+1

動的SQLがで許可されていませんUDF。このトピックについては、[こちら](http://www.sommarskog.se/dynamic_sql.html#UDF)を参照してください。 –

+0

ありがとうございます。私の問題の回避策を提案できますか?上記のselect文を書くことができる他の方法はありますか?私が必要とするのは、RegionTypeIDとRegionIDが存在するかどうかを知ることだけです。 –

+1

@SarinGopalan関数の代わりにストアドプロシージャ(SP)を使用できます。必要ならば、SPの結果を表に書くことができます。 – gofr1

答えて

0

CREATE PROCEDURE ProcNameGoesHere 
    @p_TableName nvarchar(500), 
    @p_RegionID uniqueidentifier, 
    @output int OUTPUT 
AS 
BEGIN 
    DECLARE @Statement1 nvarchar(max), 
      @ParmDefinition nvarchar(500) 

    SET @Statement1 = N'SELECT @someValue = 1 FROM ' + @p_TableName + 
         ' WHERE RegionTypeID = 1 AND RegionID = ' + 
         CONVERT (nvarchar (50), @p_RegionID) 
    SET @ParmDefinition = N'@someValue int OUTPUT' 

    EXEC sp_executesql @Statement1, @ParmDefinition, @[email protected] OUTPUT 

    RETURN; 

END 

を次に、あなたがこのようにそれを呼び出すことができます。

DECLARE @output int 

EXEC ProcNameGoesHere '[PS].[Availability]','AF4C182C-F751-41AD-AA6A-20A50A7A38C8', @output OUTPUT 

SELECT @output 

または:

IF ISNULL(@output,0) = 1 
BEGIN 
    --Do something here 
END 
+0

それは素晴らしいです!ありがとうございます..... –

+0

私の喜び!答えが役に立つなら、upvote/acceptを自由に感じてください、それはあなたに感謝の言葉をする素晴らしい方法です! :) – gofr1

関連する問題