我可以通过 Microsoft SQL Azure (RTM) - 12.0.2000.8 中的视图调用存储过程吗

Can i call a stored procedure through a view in Microsoft SQL Azure (RTM) - 12.0.2000.8

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

@Nani - 我想扩展我的同事(Kalyan 和 Krishnendu)分享的内容,并提供和回答有关支持 DMV 的 Azure SQL (RTM) 12.0.2000.8。 Azure SQL 数据库(单实例)确实支持用户 DMV,但仅支持 System Dynamic Management Views. Your options are to leverage Azure SQL Database Managed Instance or SQL Server on an Azure VM, as these SQL deployment options offer a near on-premise experience, where Azure SQL Database (Single Instance) offers a subset of functionality. All three of these are running the same (12.0.2000.8) build. The key to identifying which 12.x deployment will work for this scenario is to look at the @SERVERPROPERTY (Transact-SQL) 值:

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

I 运行 Azure SQL 数据库(单实例)上的上述查询,因为它被标识为 Engine Edition = 5(SQL 数据库)。如果您 运行 针对 Azure SQL 数据库托管实例(或 Azure 中的任何 SQL 数据库实例)执行相同的查询,您将看到 Product Version = 12.0.2000.8 是相同的除了 Engine Edition 之外的所有实例都不会,这就是为什么您的解决方案适用于某些 RTM 产品版本 12.0.2000.8 实例而不适用于其他实例的原因。如果此 运行s 在本地 SQL 服务器实例中,并且您希望它在 Azure 中按原样 运行,则需要将 SQL 服务器实例部署到Azure VM 并且是一个 IaaS 选项。 Azure SQL 数据库托管实例是 PaaS 选项,但两种特定部署类型之间的 T-SQL 有一些细微差别,详情如下:T-SQL differences between SQL Server & Azure SQL Managed Instance

总而言之,产品版本 @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";

此致, 麦克

答案如下:

当执行下面的过程时,它会直接创建一个视图,并且可以通过弹性作业不频繁的间隔或通过检查何时向源添加新部门来触发此过程table。

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