0

我的主数据库中有一个存储过程。它由提供所有参数的外部程序使用。提供的参数之一是数据库名称。在该数据库中应该有一个名为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存储所有数据库及其表名的数据库中创建视图?

4

2 回答 2

1

使用文档中看到的函数 OBJECT_ID()?

https://msdn.microsoft.com/en-US/library/ms190328.aspx

于 2016-01-26T19:33:42.547 回答
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 块中,您可以返回您正在寻找的消息。

于 2016-01-26T19:33:58.243 回答