0

我有一个需要从视图中调用的动态数据透视存储过程,是否可以在 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
4

2 回答 2

1

这是答案:

当执行下面的 proc 时,它会直接创建一个视图,并且可以通过弹性作业不频繁间隔触发此 proc,也可以通过检查何时将新分区添加到源表来触发此 proc。

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='CREATE VIEW MY_VIEW AS 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
于 2020-07-26T13:12:48.620 回答
0

@Nani - 我想扩展我的同事(Kalyan 和 Krishnendu)就支持 DMV 的 Azure SQL (RTM) 12.0.2000.8 分享、提供和回答的内容。Azure SQL 数据库(单实例)确实支持用户 DMV,但仅支持系统动态管理视图。你的选择是在 Azure VM 上利用 Azure SQL 数据库托管实例或 SQL Server,因为这些 SQL 部署选项提供了接近本地的体验,其中 Azure SQL 数据库(单一实例)提供了部分功能。所有这三个都运行相同的 (12.0.2000.8) 版本。确定哪种 12.x 部署适用于此方案的关键是查看@SERVERPROPERTY (Transact-SQL)值:

  SERVERPROPERTY('EngineEdition') AS "Engine Edition", 
  SERVERPROPERTY('Edition') AS "Edition",

在此处输入图像描述

我在 Azure SQL 数据库(单实例)上运行了上述查询,因为它被标识为Engine Edition = 5(SQL 数据库)。如果您对 Azure SQL 数据库托管实例(或 Azure 中的任何 SQL 数据库实例)运行相同的查询,您将看到Product Version = 12.0.2000.8所有实例都相同,但引擎版不会,这就是您的解决方案可以工作的原因在某些 RTM产品版本12.0.2000.8 实例而不是其他实例上。如果它在本地 SQL Server 实例中运行,并且您希望它在 Azure 中按原样运行,则需要将 SQL Server 实例部署到 Azure VM 并且是 IaaS 选项。Azure SQL 数据库托管实例是 PaaS 选项,但两种特定部署类型之间的 T-SQL 有一些细微差别,详情如下:SQL Server 和 Azure SQL 托管实例之间的 T-SQL 差异

总之,仅产品版本@SERVERPROPERTY 无法确定对给定功能的支持。您还需要包含Engine Edition @SERVERPROPERTY。有了这个,您可以针对特定的讨论点,围绕对所需功能的支持等。

SELECT  SERVERPROPERTY('ProductVersion') AS "Product Version", 
    SERVERPROPERTY('ProductLevel') AS "Product Level", 
    SERVERPROPERTY('EngineEdition') AS "Engine Edition", 
    SERVERPROPERTY('Edition') AS "Edition",
    @@Version AS "Version";

问候,迈克

于 2020-07-25T00:49:26.577 回答