我正在尝试在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语句。
答案 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