gpt4 book ai didi

tsql - 如何检查与 object_id 关联的对象类型? (SQL Server 2012)

转载 作者:行者123 更新时间:2023-12-05 00:32:07 26 4
gpt4 key购买 nike

我已经通过 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 比较陌生,所以这可能不是最有效的方法。

谢谢,
安德鲁

最佳答案

您可以使用 sys.tables 引用表格在与 Sequence 相关联的约束内查看和搜索仅列:

select quotename(schema_name(t.schema_id)) + '.' + quotename(t.name)
from sys.tables t
join sys.columns c on c.object_id = t.object_id
left join sys.check_constraints cs on cs.parent_object_id = t.object_id and cs.parent_column_id = c.column_id
and cs.definition like '%Sequence]>=(1))'
where c.name = 'Sequence' and cs.object_id is NULL

这应该为您提供具有 Sequence 的表列,但对其没有约束或具有未根据指定规则定义的约束。

关于tsql - 如何检查与 object_id 关联的对象类型? (SQL Server 2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com