MSSQL:给定一个表的object_id,确定它是否为空

Eam*_*nne 4 sql reflection introspection sql-server-2008

对于一些数据库健全性检查代码,我想确定一个特定的object_id是否对应于一个表.

是否有某种方式(例如)select count(*) from magic_operator(my_object_id)或类似的?

我非常喜欢可以在MS SQL server 2008b上运行的纯SQL解决方案.

Mar*_*ith 11

你可以从中得到一个粗略的想法

SELECT SUM(rows)
FROM sys.partitions p 
WHERE index_id < 2 and p.object_id=@my_object_id
Run Code Online (Sandbox Code Playgroud)

如果要保证准确性,则需要构造并执行包含两个部分对象名称的动态SQL字符串.下面的示例虽然取决于您如何使用它,但您可能更喜欢使用sp_executesql并将结果作为输出参数返回.

DECLARE @DynSQL nvarchar(max) = 
            N'SELECT CASE WHEN EXISTS(SELECT * FROM ' + 
            QUOTENAME(OBJECT_SCHEMA_NAME(@my_object_id)) + '.' + 
                   QUOTENAME(OBJECT_NAME(@my_object_id)) +
           ') THEN 0 ELSE 1 END AS IsEmpty'


EXECUTE (@DynSQL)
Run Code Online (Sandbox Code Playgroud)