Sql server 如何从不同的sql数据库检查表的存在性?

Sql server 如何从不同的sql数据库检查表的存在性?,sql-server,tsql,sql-server-2008-r2,exists,Sql Server,Tsql,Sql Server 2008 R2,Exists,我有db A和db B。在存储过程的开头,我想将所有行从B.mytable备份到B.mytablebackup。存储过程的其余部分针对db A上的表运行,db A收集数据并将其写入B.mytable 所以我检查一下B.mytablebackup是否存在 如果是,则存储过程执行 INSERT INTO B..mytablebackup SELECT * FROM B..mytable 如果它不存在,它就有一个 SELECT * INTO B..mytablebackup from B..myta

我有db A和db B。在存储过程的开头,我想将所有行从B.mytable备份到B.mytablebackup。存储过程的其余部分针对db A上的表运行,db A收集数据并将其写入B.mytable

所以我检查一下B.mytablebackup是否存在

如果是,则存储过程执行

INSERT INTO B..mytablebackup SELECT * FROM B..mytable
如果它不存在,它就有一个

SELECT * INTO B..mytablebackup from B..mytable
但是当我执行存储过程时,我得到了错误

数据库中已存在名为“mytablebackup”的对象

我添加了一个Print语句,执行的是IF的不存在分支


我做错了什么

对于SQL Server,应该使用system view sys.tables检查表是否存在

IF EXISTS(SELECT 1 FROM B.sys.tables WHERE name = 'mytablebackup')
也可用于:

如果对象_ID'B.dbo.mytablebackup'不为空
您可以直接从给定的数据库、模式和表参数中检查动态数据库、模式和表的使用情况

DECLARE @targetdatabase  NVARCHAR(MAX),
        @SchemaName      NVARCHAR(MAX),
        @TableName       NVARCHAR(MAX)

DECLARE @TempTableName NVARCHAR(MAX) = QUOTENAME(@targetdatabase) + '.' + 
QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName)

IF OBJECT_ID(@TempTableName) IS NULL
BEGIN
    PRINT @TempTableName
END

SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。很多东西都是特定于供应商的-因此我们确实需要知道您使用的数据库系统和版本,请相应地更新标记…@marc_s我猜它是基于db.schema.tbl formatIF exists的MSSQL从B.dbo.mytablebackup中选择1检查mytablebackup中是否至少有一行。它不会告诉您表本身是否存在。如果表不存在,它将生成编译error@FreshPrinceOfSO:当然可以-我猜到了-但是如果你不必猜的话会更容易…我的道歉:Microsoft SQL Server上的TSQL。
DECLARE @targetdatabase  NVARCHAR(MAX),
        @SchemaName      NVARCHAR(MAX),
        @TableName       NVARCHAR(MAX)

DECLARE @TempTableName NVARCHAR(MAX) = QUOTENAME(@targetdatabase) + '.' + 
QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName)

IF OBJECT_ID(@TempTableName) IS NULL
BEGIN
    PRINT @TempTableName
END