簡體   English   中英

如何在 SQL 服務器項目的 Visual Studio 中使用動態 SQL 中的數據庫變量名稱?

[英]How to use a Database Variable Name in dynamic SQL with visual studio for a SQL Server Project?

Visual Studio 中有沒有辦法在動態 SQL 中為 SQL 服務器項目使用數據庫變量名稱 或者,是否有替代解決方案?

我有一個 SQL 服務器數據庫的項目,其中引用了其他數據庫項目,每個項目都設置了數據庫變量名稱 例如,數據庫變量名稱$(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。

可以直接在動態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'' '

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM