यहां एक कार्यशील स्क्रिप्ट है जो INFORMATION_SCHEMA.COLUMNS
. का उपयोग करती है सभी *varchar(max)
. को खोजने के लिए कॉलम और उन्हें 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
यह केवल कर्सर के उपयोग के बारे में है जिसे मैंने कभी अनदेखा किया है, लेकिन यह एक अच्छा है। अनिवार्य रूप से, यह सभी *varchar(max)
. को ढूंढता है , बनाता है alter
कथन, और फिर इसे sp_executesql
. का उपयोग करके निष्पादित करता है ।
आनंद लें!