[英]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.