Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách thay đổi tất cả các cột Sql của một DataType thành một loại khác

Đâ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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. máy chủ sql:chọn các hàng mà tổng của phù hợp với một giá trị

  2. Sử dụng LIKE trong sp_executesql

  3. Chia một giá trị cột thành nhiều giá trị cột

  4. tính toán xếp hạng trung bình trong máy chủ sql

  5. Cách CHỌN * nhưng không có Tên cột phải là duy nhất trong mỗi dạng xem