Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक डेटा प्रकार के सभी एसक्यूएल कॉलम को दूसरे में कैसे बदलें

यहां एक कार्यशील स्क्रिप्ट है जो 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 . का उपयोग करके निष्पादित करता है ।

आनंद लें!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डालने पर अंतिम पंक्ति के ऑटोइनक्रिकमेंट का मूल्य कैसे प्राप्त करें

  2. टी-एसक्यूएल का उपयोग कर स्ट्रिंग से संख्यात्मक भाग कैसे प्राप्त करें?

  3. मैं एक स्ट्रिंग के लिए SQL सर्वर डेटाबेस कैसे खोजूं?

  4. ISJSON () SQL सर्वर में उदाहरण (T-SQL)

  5. तारीख को केवल घंटे/मिनट तक छोटा करें