我有下面的动态SQL,分别将text和image列更改为varchar(max)和varbinary(max),但是当我生成SQL时,image列不是在alter column语句中使用Varbinary(max)生成的,而是随Varchar(max)一起出来。我在做什么错?
USE DBNAME
go
DECLARE @SQL VARCHAR(MAX)
set @SQL = ' ';
SELECT @SQL = @SQL + ' ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(sys.columns.object_id)) + '.' +
QUOTENAME(OBJECT_NAME(sys.columns.object_id)) +
' ALTER COLUMN ' + QUOTENAME(sys.columns.Name) +
CASE WHEN sys.columns.system_type_id in (34, 35) THEN ' VARCHAR(MAX) ' ELSE ' VARBINARY(MAX) ' END +
CASE WHEN is_nullable = 0 THEN 'NOT NULL' ELSE '' END
FROM sys.Tables
inner join sys.columns on sys.tables.object_id = sys.columns.object_id
WHERE is_ms_shipped = 0 --exclude Dtproperties table, it uses type_desc = USER_TABLE
and
sys.columns.system_type_id in (34, 35, 99); -- user_type_id: text = 34, ntext = 35, Image = 99
print @SQL;
--EXECUTE sp_executesql @SQL;
GO
答案 0 :(得分:0)
没关系。我使用了错误的系统类型ID。在我的案情陈述中应为(35,99)