如何检查进程中不同数据库中表的存在 - SQLServer

How to check existence of tables in different databases in a proc - SQLServer

我正在处理一个存在于一个数据库中的过程,它从其他源数据库中选择 table(作为参数传递)并将缺失值插入其他目标数据库(再次作为参数传递)。 我的插入查询是一个动态查询,在执行它之前,我想检查源和目标 tables 是否存在。我不想再次执行动态查询只是为了检查 table 是否存在,因为不建议批量使用它们,

有什么办法可以达到下面的效果

USE @DbName
GO
IF EXISTS (
            SELECT 1
            FROM sys.tables
            WHERE NAME = @table
                AND type = 'U'
           )
BEGIN
     code here...
END

IF EXISTS (
            SELECT 1
            FROM @fulltableName -- where variable consists 'dbname.sys.tables'
            WHERE NAME = @table
                AND type = 'U'
           )
BEGIN
     code here...
END

仅借助变量而不执行动态查询。

检查是否 OBJECT_ID returns 一个值。如果要检查表,请使用 U 作为第二个参数。

IF OBJECT_ID('DatabaseName.dbo.TableName', 'U') IS NOT NULL
BEGIN
    -- Table Exists
END

有变量:

DECLARE @DatabaseName VARCHAR(100) = 'MyCustomDatabase'
DECLARE @SchemaName VARCHAR(100) = 'dbo'
DECLARE @TableName VARCHAR(100) = 'Countries'

IF OBJECT_ID(QUOTENAME(@DatabaseName) + '.' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName), 'U') IS NOT NULL
BEGIN
    -- Do stuff
END

确保使用具有足够权限的登录名执行。