sql >> Database >  >> RDS >> Sqlserver

Gegevenstype Char converteren naar Nvarchar

Selecteren uit INFORMATION_SCHEMA.COLUMNS is een goede manier om te bepalen welke kolommen moeten worden geconverteerd,

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'CHAR';

Maar het kan niet worden gebruikt om het gegevenstype van een kolom rechtstreeks te wijzigen. WIJZIG TABEL wordt gebruikt om kolomgegevenstypen te wijzigen:

ALTER TABLE [dbo].[TableName] ALTER COLUMN [ColumnName] NVARCHAR(50);

Terwijl je toch bezig bent, vermijd het gebruik van NVARCHAR(MAX) tenzij het absoluut noodzakelijk is. Zorg ervoor dat uw gegevenstypen een specifiek formaat hebben voor het kenmerk. Als uw CHAR kolommen al de juiste grootte hebben, gebruik het volgende script om genereren de ALTER TABLE uitspraken:

SELECT  'ALTER TABLE ' +
        QUOTENAME(TABLE_SCHEMA) + '.' +
        QUOTENAME(TABLE_NAME) +
        ' ALTER COLUMN ' +
        QUOTENAME(COLUMN_NAME) +
        ' NVARCHAR(' +
        CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ');'
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   DATA_TYPE = 'char';

Houd er rekening mee dat dit alleen de ALTER TABLE-instructies genereert, u moet de resultaten kopiëren en uitvoeren op een nieuw tabblad om de gegevenstypen te wijzigen.



  1. SQL-selectie uit twee tabellen retourneert dubbele waarden - Codeigniter

  2. Waarom maakt MySQL een volledige scan als ik deelneem aan een zeer kleine/lege tabel, ondanks dat ik LIMIT gebruik?

  3. wanneer de berekende kolom wordt bijgewerkt?

  4. Een Unix-tijdstempel converteren naar een datum/tijd-waarde in PostgreSQL