在Visual Studio中,有没有一种方法可以为SQL Server项目在动态SQL中使用数据库变量名?还是有替代解决方案?
我有一个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。
您可以直接在动态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'' '
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句