我需要创建一个SQL更改脚本来检查列的特定数据类型,如果列属于该类型,则编辑数据类型。
例如
IF (SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table' AND COLUMN_NAME = 'Xml') = 'xml')
如果'Table'中的'Xml'列是Xml类型,我希望上面的代码返回true。我需要将其更改为varchar(max)
。
答案 0 :(得分:2)
对于此类脚本,我使用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
。