gpt4 book ai didi

sql - 如何判断索引是否包含 varchar(max) 类型的列?

转载 作者:行者123 更新时间:2023-12-04 21:49:31 24 4
gpt4 key购买 nike

我正在处理我的 MSSQL 索引碎片整理脚本。某些类型的索引可以在线重建,而其他类型的则不能。

对于聚簇索引,很容易看出表是否包含任何 LOB 列,但对于非聚簇索引,我需要明确知道该特定索引是否包含任何 LOB 列。

我过去可以通过查看 dm_db_index_physical_stats 中的 alloc_unit_type_desc 来做到这一点,但这不适用于 varchar(max) 和 xml 类型的列。

这不是我的数据库,所以我不想讨论索引是否合适,让我们接受它存在并且我希望脚本能够处理这种情况。

有谁知道我可以编写什么样的 SQL 来检查这个?假设我在标量变量中拥有所有相关的对象 ID 和对象名称。

最佳答案

如果您有一个最大长度的 char 或 nvarchar,那么它将在 sys.columns 表中有一个条目,其中包含该字段的适当系统类型 ID,最大长度为 -1。

因此,如果您想要查找具有 varchar(系统类型 id 167)的所有索引的所有 id,您可以这样做:

select distinct
si.*
from
sys.indexes as si
inner join sys.index_columns as ic on
ic.object_id = si.object_id and
ic.index_id = si.index_id
inner join sys.columns as sc on
sc.object_id = ic.object_id and
sc.column_id = ic.column_id
where
sc.system_type_id = 167 and
sc.max_length = -1

关于sql - 如何判断索引是否包含 varchar(max) 类型的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/607226/

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