在标量函数sql server中执行动态查询

时间:2016-05-23 07:09:22

标签: sql-server

我正在尝试在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。

但是当我从其他地方调用此函数时,我收到此错误:

  

名称'SELECT 1 FROM [PS]。[可用性] WHERE RegionTypeID = 1 AND   RegionID = AF4C182C-F751-41AD-AA6A-20A50A7A38C8'无效   标识符

我需要知道如何从标量函数中调用动态sql select语句。

1 个答案:

答案 0 :(得分: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, @output=@someValue 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