Я думаю, что вы можете попробовать найти все таблицы, в которых есть столбцы с типом данных DATETIME
, а также есть ли у них индексы. Пожалуйста, примите во внимание следующее:
create table #TempTable (
TableName VARCHAR(MAX),
ColumnName VARCHAR(MAX),
IndexName VARCHAR(MAX)
)
;WITH CTE1(TableName, ColumnName) AS
(
SELECT
so.name table_name
,sc.name column_name
from sysobjects so
inner join syscolumns sc on (so.id = sc.id)
inner join systypes st on (st.type = sc.type)
where so.type = 'U'
and st.name IN ('DATETIME')
),
CTE2(TABLEName, ColumnName, IndexName) AS
(
SELECT cte1.TableName, c.name, i.name
FROM sys.index_columns AS ic
INNER JOIN sys.indexes AS i
ON ic.[object_id] = i.[object_id]
AND ic.index_id = i.index_id
INNER JOIN sys.columns AS c
ON ic.[object_id] = c.[object_id]
AND ic.column_id = c.column_id
INNER JOIN cte1 AS cte1 ON cte1.columnName = c.name
)
INSERT INTO #TempTable
SELECT DISTINCT * FROM CTE2
SELECT * FROM #TempTable
Тогда вы могли бы сделать несколько динамических SQL, чтобы сделать следующее:
--Dynamic SQL populate values
BEGIN
-- drop index
-- alter column
-- delete row from temp table
-- recreate index
-- process next row
END
Вероятно, есть лучший способ сделать последнюю часть, как только вы получите данные, я позволю вам сделать это. Надеюсь, это поможет.