【发布时间】:2023-04-01 01:53:01
【问题描述】:
我有一个需要从视图中调用的动态数据透视存储过程,是否可以在 Microsoft SQL Azure (RTM) - 12.0.2000.8 中调用?
CREATE PROCEDURE [dbo].[MyProc]
AS
DECLARE @pivv NVARCHAR(MAX),@Query NVARCHAR(MAX)
SELECT @pivv=COALESCE(@pivv+',','')+ QUOTENAME(DIVISION) from [dbo].[sales_table] GROUP BY DIVISION
IF ISNULL(@pivv, '')<>''
SET @Query='SELECT * FROM(
SELECT STOREID, DIVISION TYP, SALES VAL from [dbo].[sales_table]
)x pivot (MAX(VAL) for TYP in ('+@pivv+')) as xx'
IF ISNULL(@Query, '')<>''
EXEC (@Query)
GO
【问题讨论】:
-
你现在尝试了什么?如果失败,错误信息是什么?
-
试过 OpenQuery 但不支持,因为输出是动态的,无法得出结论
-
看你的SP,看来你可以轻松避免动态查询。取而代之的是逗号分隔的字符串@pivv,您可以声明一个表变量来插入除法。然后代替动态 sql 形成,你可以只做一个 in 或加入那个 table var。然后将 SP 转换为表值 udf。最后,不要在视图中使用疯狂的 openquery,只需像另一个表一样进行简单的 udf 调用。
-
或者更简单的查询可以在单个语句中使用 PARTITION BY Division 来完成
-
您好,请您详细解释一下好吗?
标签: function stored-procedures view azure-sql-database dynamic-pivot