sql-server – 如何检查SQL Server表是否是系统表
发布时间:2020-05-24 11:47:32 所属栏目:MsSql 来源:互联网
导读:使用存储过程sp_msforeachtable,可以为数据库中的所有表执行脚本. 但是,有一些系统表我想从中排除.本能地,我会检查属性IsSystemTable或IsMSShipped.这些不像我期望的那样工作 – 我有一个名为__RefactorLog的表: 但是,当我查询这是一个系统还是MS Shipped表
|
使用存储过程sp_msforeachtable,可以为数据库中的所有表执行脚本. 但是,有一些系统表我想从中排除.本能地,我会检查属性IsSystemTable或IsMSShipped.这些不像我期望的那样工作 – 我有一个名为__RefactorLog的表: 但是,当我查询这是一个系统还是MS Shipped表时,SQL Server报告我的表都不是系统表: exec (N'EXEC Database..sp_msforeachtable "PRINT ''? = '' + CAST(ObjectProperty(Object_ID(''?''),''IsSystemTable'') AS VARCHAR(MAX))"') AS LOGIN = 'MyETLUser'
-- Results of IsSystemTable:
[dbo].[__RefactorLog] = 0
[schema].[myUserTable] = 0
和 exec (N'EXEC Database..sp_msforeachtable "PRINT ''? = '' + CAST(ObjectProperty(Object_ID(''?''),''IsMSShipped'') AS VARCHAR(MAX))"') AS LOGIN = 'MyETLUser'
-- Results of IsMSShipped:
[dbo].[__RefactorLog] = 0
[schema].[myUserTable] = 0
当我查看表的属性(在SSMS内)时,该表被标记为系统对象.但是(AFAIK)不存在像IsSystemObject这样的对象属性. 除了对象属性外,如何检查表是否是系统对象? SSMS如何检查表是否是系统对象? 解决方法在对象资源管理器中打开“系统表”文件夹时,管理工作室2008似乎运行了一些非常难看的代码,关键位似乎是:CAST(
case
when tbl.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = tbl.object_id and
minor_id = 0 and
class = 1 and
name = N''microsoft_database_tools_support'')
is not null then 1
else 0
end
AS bit) AS [IsSystemObject]
(其中tbl是sys.tables的别名) 所以它似乎是一个组合 – 从sys.tables的is_ms_shipped为1,或者具有特定的扩展属性集. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- mysql截取的字符串函数substring_index的用法
- 数据库设计 – 是否有工具检查我的数据库是否已标
- SQL Server 2000/2005/2008 的收缩日志方法和清理
- SQL Server EXEC(EXECUTE)函数访问INSERTED或DEL
- sql – xp_smtp_sendmail随机添加到html的空格
- SQL档案脚本
- sql-server – MS-SQL / ColdFusion:神秘数据库
- SQLServer2005中的SQLCMD工具使用
- 将数据库数据从Windows上的xampp传输到Ubuntu
- 如何在SQL 2005 Reporting Services报告的标题中
热点阅读
