EXEC sp_MSforeachtable N'ALTER TABLE ? NOCHECK CONSTRAINT ALL';
ALTER DATABASE SCS SET RECOVERY BULK_LOGGED;
declare @sqlStr nvarchar(500), @tname nvarchar(50), @colname nvarchar(50), @length int;
WHILE EXISTS (SELECT *
FROM Sys.Tables sys_tables
JOIN Sys.Schemas sys_schemas ON sys_schemas.Schema_Id = sys_tables.Schema_Id
JOIN Sys.Columns sys_columns ON sys_columns.Object_Id = sys_tables.Object_Id
JOIN Sys.Types sys_types ON sys_types.System_Type_Id = sys_columns.System_Type_Id
WHERE (sys_types.Name like '%char' or sys_types.Name = 'text') and sys_schemas.Name = 'dbo' and sys_types.system_type_id = 167 )
BEGIN
SELECT TOP(1)
@tname = sys_tables.Name
,@colname = sys_columns.Name
,@length = sys_columns.max_length
FROM Sys.Tables sys_tables
JOIN Sys.Schemas sys_schemas ON sys_schemas.Schema_Id = sys_tables.Schema_Id
JOIN Sys.Columns sys_columns ON sys_columns.Object_Id = sys_tables.Object_Id
JOIN Sys.Types sys_types ON sys_types.System_Type_Id = sys_columns.System_Type_Id
WHERE (sys_types.Name like '%char' or sys_types.Name = 'text')
and sys_schemas.Name = 'dbo' and sys_types.system_type_id = 167
ORDER BY
sys_schemas.Name
, sys_tables.Name
, sys_columns.Name
, sys_types.name;
SET @sqlStr = N'ALTER TABLE dbo.' + @tname + N' ALTER COLUMN ' + @colname + N' NVARCHAR(' + case @length when -1 then N'max' else CONVERT(nvarchar, @length) end + N')'
EXEC sp_executesql @sqlStr;
print @sqlStr;
END
EXEC sp_MSforeachtable N'ALTER TABLE ? CHECK CONSTRAINT ALL';
ALTER DATABASE SCS SET RECOVERY FULL;
--SET @sqlStr = N'ALTER TABLE dbo.' + @tname + N' ALTER COLUMN ' + @colname + N' NVARCHAR(' + @length + N')'