动态SQL转换文本和图像

时间:2018-07-13 17:45:07

标签: sql sql-server sql-server-2005

我有下面的动态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

1 个答案:

答案 0 :(得分:0)

没关系。我使用了错误的系统类型ID。在我的案情陈述中应为(35,99)