从存储过程中引用数据库?

Ste*_*teB 2 sql-server t-sql

我正在使用此 T-SQL 来获取索引统计信息(为简洁起见进行了编辑):

SET @db_id = DB_ID(N'TestDB');
SET @object_id = OBJECT_ID(N'TestDB.dbo.Users');
SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'LIMITED');
Run Code Online (Sandbox Code Playgroud)

我希望能够将它封装到一个存储过程中,并为存储过程所在的任何数据库调用它,但数据库名称是硬编码的,如何动态获取数据库名称?

T-SQL 有没有类似的东西:

SET @db_id = DB_ID(this);

Stu*_*ore 6

如果db_id()不带参数调用它返回当前数据库的 id - http://msdn.microsoft.com/en-us/library/ms186274.aspx

所以你可以使用: set @db_id=db_id()

阅读完问题的其余部分后,您可以在object_id()没有数据库名称的情况下拨打电话。如果对象存在,您将获得 id,如果不存在NULL。所以: SET @object_id = OBJECT_ID(N'dbo.Users');