2016-05-23 48 views
1

我想在SQL Server中創建一個標量函數。我已經創造了select語句如下:在標量函數sql server中執行動態查詢

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

這裏@p_TableName是表(爲nvarchar(500))的名稱和@p_RegionID是唯一標識符。

我現在執行上述聲明如下:

EXEC @ReturnValue1 = @Statement1 

WHERE @ReturnValue1爲int。

但是,當我把這個功能從其他地方我得到這個錯誤:

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

我需要知道我可以從一個標量函數中調用動態SQL SELECT語句。

+1

動態SQL不容許UDF的。檢查[這裏](http://www.sommarskog.se/dynamic_sql.html#UDF)以獲取有關該主題的良好參考。 –

+0

謝謝...你能爲我的問題建議一個解決方法嗎?有沒有其他的方法可以寫出上面給出的select語句?我需要的是知道RegionTypeID和RegionID是否存在? –

+1

@SarinGopalan你可以使用存儲過程(SP)而不是函數。如果你需要的話,SP的結果可以寫在表格中。 – gofr1

回答

0

你可以像下面創建SP與輸出參數:

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 /接受它,這是說謝謝你的好方法! :) – gofr1