Для таких сценариев, которые я использую SQL Server metadata/catalog взгляды вместо взглядов из INFORMATION_SCHEMA
:
Для нетипизированных столбцов XML:
IF EXISTS(
SELECT *
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.name = N'dbo'
AND t.name = N'Table1'
AND c.name = N'Col2'
AND tp.name= N'xml'
)
BEGIN
ALTER TABLE dbo.Table1
ALTER COLUMN ...
END
Для типизированных столбцов XML:
IF EXISTS(
SELECT xmlcol.*
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.xml_schema_collections xmlcol ON c.xml_collection_id = xmlcol.xml_collection_id
JOIN sys.schemas xmlcols ON xmlcol.schema_id = s.schema_id
WHERE s.name = N'Production'
AND t.name = N'ProductModel'
AND c.name = N'Instructions'
AND xmlcols.name = N'Production'
AND xmlcol.name = N'ManuInstructionsSchemaCollection'
)
BEGIN
ALTER TABLE dbo.Table1
ALTER COLUMN ...
END
Примечание : Если бы я преобразовал значения XML в текст значения Я бы использовал NVARCHAR
вместо VARCHAR
.
Было бы безопаснее, если вы сделаете это так? Шаг 1: Найдите все столбцы с желаемым типом данных Шаг 2: Пройдите через каждый столбец и вручную обновите тип данных – Cam
Мне нужно только изменить этот тип данных столбцов не все из них, у которых есть тип данных xml. – Chris