如何在动态 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'' '
在 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'' '