Đây là tập lệnh hoạt động sử dụng INFORMATION_SCHEMA.COLUMNS
để tìm tất cả *varchar(max)
và chuyển đổi chúng thành varchar(255)
:
declare @schema nvarchar(255)
declare @table nvarchar(255)
declare @col nvarchar(255)
declare @dtype nvarchar(255)
declare @sql nvarchar(max)
declare maxcols cursor for
select
c.TABLE_SCHEMA,
c.TABLE_NAME,
c.COLUMN_NAME,
c.DATA_TYPE
from
INFORMATION_SCHEMA.COLUMNS c
inner join INFORMATION_SCHEMA.TABLES t on
c.TABLE_CATALOG = t.TABLE_CATALOG
and c.TABLE_SCHEMA = t.TABLE_SCHEMA
and c.TABLE_NAME = t.TABLE_NAME
and t.TABLE_TYPE = 'BASE TABLE'
where
c.DATA_TYPE like '%varchar'
and c.CHARACTER_MAXIMUM_LENGTH = -1
open maxcols
fetch next from maxcols into @schema, @table, @col, @dtype
while @@FETCH_STATUS = 0
begin
set @sql = 'alter table [' + @schema + '].[' + @table +
'] alter column [' + @col + '] ' + @dtype + '(255)'
exec sp_executesql @sql
fetch next from maxcols into @schema, @table, @col, @dtype
end
close maxcols
deallocate maxcols
Đây là về cách sử dụng con trỏ duy nhất mà tôi từng chấp nhận, nhưng nó là một cách sử dụng tốt. Về cơ bản, nó tìm thấy tất cả *varchar(max)
, xây dựng alter
và sau đó thực thi nó bằng cách sử dụng sp_executesql
.
Hãy tận hưởng!