如何检查进程中不同数据库中表的存在 - 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
确保使用具有足够权限的登录名执行。
我正在处理一个存在于一个数据库中的过程,它从其他源数据库中选择 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
确保使用具有足够权限的登录名执行。