Translate

Tuesday, December 11, 2012

Change Cols to nvarchar

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')'