我已经通过 StackOverflow 和 Google 搜索了一段时间,并没有发现任何太相似的东西,所以这是我的问题:
我目前正在编写一个存储过程来检查名为“Sequence”的数据库中的每一列是否都有一个关联的约束,以确保该值> = 1。但是,我当前的方法返回包含“序列”的所有对象,而不仅仅是表(即获取/设置/删除包含“序列”的存储过程)。
这是我当前的代码,它有效,但我觉得这是一个肮脏的解决方案:
SELECT DISTINCT
'The Sequence column of the ' + CAST(OBJECT_NAME([AC].[object_id]) AS NVARCHAR(255)) + ' table is missing a Sequence>=1 constraint.' AS MESSAGE
FROM [sys].[all_columns] AC
LEFT JOIN [sys].[check_constraints] CC
ON [CC].[parent_object_id] = [AC].[object_id]
AND [CC].[name] LIKE '%Sequence'
AND [CC].[definition] LIKE '%Sequence]>=(1))'
WHERE [AC].[name] = 'Sequence'
AND [CC].[name] IS NULL
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Get%'
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Set%'
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Delete%'
具体来说,我的问题是:给定 [sys].[all_columns].[object_id],是否有一种简单的方法可以检查给定对象是表还是存储过程?
对此的任何帮助或建议将不胜感激!这里也是一般代码清理,我对 tSQL 比较陌生,所以这可能不是最有效的方法。
谢谢,安德鲁