sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ändrar alla SQL-kolumner av en datatyp till en annan

Här är ett fungerande skript som använder INFORMATION_SCHEMA.COLUMNS för att hitta alla *varchar(max) kolumner och konverterar dem till 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

Det här är ungefär den enda användningen av markörer som jag någonsin accepterar, men det är bra. I huvudsak hittar den alla *varchar(max) , bygger alter satsen och kör den sedan med sp_executesql .

Njut!



  1. flask-migrera kan inte släppa tabellen eftersom andra objekt är beroende av den

  2. Millisekunder fel vid konvertering från XML till SQL Server datumtid

  3. Ta text från en fil och infoga i en mysql-tabell med hjälp av ett skript

  4. Oracle Funktion för att returnera likheter mellan strängar