T-SQL USE 数据库 - 基于 SYS 表中可用的数据库

问题描述 投票:0回答:1

我正在使用 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-server database tsql if-statement switch-statement
1个回答
0
投票

我能想到的唯一方法是使用动态 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。这可能很危险。

© www.soinside.com 2019 - 2024. All rights reserved.