我的主数据库中有一个存储过程。它由提供所有参数的外部程序使用。提供的参数之一是数据库名称。在该数据库中,应该有一个名为xyz
的表。
当请求的数据库中不存在该表时,我收到异常。我想在存储过程中写一些东西来检查该表是否存在,如果它不存在则返回更有用的东西。
这比看起来更棘手。我可以使用动态SQL获取可变数据库名称。我可以使用IF EXISTS(SELECT * FROM SYS.DATABASES WHERE NAME = PARAMETER1)
检查这些数据库是否存在。
为了检查表是否存在,我需要USE
数据库,所以我需要使用动态SQL。但是,这将留下一个可执行变量,我不知道如何检查该变量的结果(例如,我无法做IF EXISTS (EXEC @SQL)
)。我希望有一些方法可以说SELECT * FROM sys.AllDatabasesAllTables WHERE DatabaseName = Parm1 AND TableName = Parm2
。
我意识到sys.AllDatabasesAllTables
不存在,但我希望也许有人知道另一种方式...有一种很好的方法可以在master
数据库中建立一个存储所有数据库和他们的桌名?
答案 0 :(得分:1)
使用文档中的函数OBJECT_ID()?
答案 1 :(得分:1)
您可以使用OBJECT_ID
,如下所示:
IF OBJECT_ID('DatabaseName.SchemaName.TableName') IS NOT NULL
BEGIN
-- Code Here
END
ELSE
BEGIN
-- Code Here
END
GO
另一种可能的解决方案,但未经过测试,是使用一种Try-Catch语句?
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
因此,在catch块中,您可以返回您要查找的消息。