如何在带有Visual Studio的动态SQL中为SQL Server项目使用数据库变量名?

Visual Studio中是否可以在动态SQL中为SQL Server项目使用数据库变量名称?还是有替代解决方案?

我有一个用于SQL Server数据库的项目,该项目引用了其他数据库项目,每个项目都设置了数据库变量名。例如,数据库变量名应为$(PROD),而我已使用此数据库变量名来使用TEST数据库发布项目。

我当前的项目正在使用动态sql,并且我希望能够使用PROD或TEST数据库发布该项目。我宁愿不使用@database变量,而仅使用SELECT @database = $(PROD)无效。

例如,下面我在带有QUOTENAME(@database)的存储过程中有动态SQL,我希望能够替换@database变量并使用$(PROD)或某种方式进行设置发布项目时的数据库名称。

DeclARE 
  @sql NVARCHAR(MAX),@database SYsnAME,@schema SYsnAME,@table SYsnAME;
CREATE TABLE #src_pk(SrcColumn VARCHAR(100));

SELECT @sql = N'SELECT QUOTENAME(b.[COLUMN_NAME]) AS [Column] 
                  FROM ' + QUOTENAME(@database) + N'.[INFORMATION_SCHEMA].[TABLE_CONSTRAINTS] a 
                  JOIN ' + QUOTENAME(@database) + N'.[INFORMATION_SCHEMA].[CONSTRAINT_COLUMN_USAGE] b 
                    ON a.[CONSTRAINT_NAME] = b.[CONSTRAINT_NAME] 
                 WHERE a.[CONSTRAINT_SCHEMA] = ' + QUOTENAME(@schema,'''') + N'
                   AND a.[TABLE_NAME] = ' + QUOTENAME(@table,'''') + N'
                   AND a.[CONSTRAINT_TYPE] = ''PRIMARY KEY'' '
INSERT INTO #src_pk EXEC sys.sp_executesql @sql;

我正在使用Visual Studio 2019;项目语言为SQL;而且,我的项目平台是SQL Server 2017。

wduke8818 回答:如何在带有Visual Studio的动态SQL中为SQL Server项目使用数据库变量名?

您可以直接在动态SQL中使用项目部署变量,只需确保正确引用它即可即可:

SELECT @sql = N'SELECT QUOTENAME(b.[COLUMN_NAME]) AS [Column] 
                  FROM ' + QUOTENAME('$(DatabaseName)') + N'.[INFORMATION_SCHEMA].[TABLE_CONSTRAINTS] a 
                  JOIN ' + QUOTENAME('$(DatabaseName)') + N'.[INFORMATION_SCHEMA].[CONSTRAINT_COLUMN_USAGE] b 
                    ON a.[CONSTRAINT_NAME] = b.[CONSTRAINT_NAME] 
                 WHERE a.[CONSTRAINT_SCHEMA] = ' + QUOTENAME(@schema,'''') + N'
                   AND a.[TABLE_NAME] = ' + QUOTENAME(@table,'''') + N'
                   AND a.[CONSTRAINT_TYPE] = ''PRIMARY KEY'' '
本文链接:https://www.f2er.com/3071951.html

大家都在问