我正在使用 Microsoft SQL Server。我有 2 个环境,每个环境都有自己的数据库(
DB1
和 DB2
)。
我有一些代码需要在两种环境中运行,但需要它根据可用的数据库动态切换使用哪个数据库。
下面的 SQL 是我想要实现的。但是,SQL Server 在执行之前解析整个语句,并对代码中的
DB1
或 DB2
提出异议,因为它在每个各自的环境中都不可用。
有什么办法可以做到这一点吗?
谢谢
IF EXISTS (SELECT * FROM master.sys.databases
WHERE name = 'DB1')
BEGIN
USE DB1
END
IF EXISTS (SELECT * FROM master.sys.databases
WHERE name = 'DB2')
BEGIN
USE DB2
END
SELECT * FROM S_Sometable
我能想到的唯一方法是使用动态 SQL,例如
DECLARE @sql NVARCHAR(MAX);
IF EXISTS(SELECT * FROM master.sys.databases WHERE name='DB1')
BEGIN
SET @sql = N'USE DB1';
END
IF EXISTS(SELECT * FROM master.sys.databases WHERE name='DB2')
BEGIN
SET @sql = N'USE DB2';
END
SET @sql = @sql + CHAR(13) + 'SELECT * FROM S_Sometable'; -- assuming that S_sometable exists in both databases
EXEC sp_executesql @sql;
但要谨慎使用动态 SQL。这可能很危险。