begin process at 2008 05 17 07:51:43
1 173 922 membres
53 nouveaux aujourd'hui
13 973 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHANGER TOUTES LES COLONNES D'UNE BASES DE DONNÉES D'UN TYPE VERS UN AUTRE [SQL 2000]


Information sur la source

Catégorie :Procédure Classé sous : changer, type, sql, server, 2000 Niveau : Débutant Date de création : 25/05/2007 Vu : 2 489

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Ce code permet de changer toutes les colonnes d'un certain type vers un autre type.
Ce code est issu d'une source de  fabrice69 : http://www.sqlfr.com/codes/SQL-SERVER-2005-CHANGER-TYPE-DONNEES-TOUTES-COLONNES_40095.aspx

Source

  • DECLARE @NewType AS VARCHAR(50)
  • DECLARE @AncType AS VARCHAR(50)
  • DECLARE @SQLCMD AS VARCHAR(500)
  • SET @AncType = 'smalldatetime'
  • SET @NewType = 'datetime'
  • DECLARE CURSORLISTCHEMA CURSOR FOR SELECT 'ALTER TABLE ['+ TABLE_SCHEMA +'].['+ TABLE_NAME +'] ALTER COLUMN '+ COLUMN_NAME +' '+ @NewType
  • FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = @AncType
  • OPEN CURSORLISTCHEMA
  • FETCH NEXT FROM CURSORLISTCHEMA INTO @SQLCMD
  • WHILE (@@fetch_status >= 0)
  • BEGIN
  • PRINT @SQLCMD
  • EXECUTE(@SQLCMD)
  • FETCH NEXT FROM CURSORLISTCHEMA INTO @SQLCMD
  • END
  • CLOSE CURSORLISTCHEMA
  • DEALLOCATE CURSORLISTCHEMA
DECLARE @NewType AS VARCHAR(50)
DECLARE @AncType AS VARCHAR(50)
DECLARE @SQLCMD AS VARCHAR(500)

SET @AncType = 'smalldatetime'
SET @NewType = 'datetime'

DECLARE CURSORLISTCHEMA CURSOR FOR SELECT 'ALTER TABLE ['+ TABLE_SCHEMA +'].['+ TABLE_NAME +'] ALTER COLUMN '+ COLUMN_NAME +' '+ @NewType
FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = @AncType

OPEN CURSORLISTCHEMA
FETCH NEXT FROM CURSORLISTCHEMA INTO @SQLCMD
WHILE (@@fetch_status >= 0)
BEGIN
PRINT @SQLCMD
EXECUTE(@SQLCMD)
FETCH NEXT FROM CURSORLISTCHEMA INTO @SQLCMD
END
CLOSE CURSORLISTCHEMA
DEALLOCATE CURSORLISTCHEMA 
  • signaler à un administrateur
    Commentaire de Escob le 28/05/2007 14:57:10

    Oui, bien.
    J'ai fait un script similaire qui transforme les varchar en nvarchar.
    Il faut faire attention a ne pas modifier les tables system de la base de données et aussi (dans le cas des datetime c'est  rares) de bien supprimer les primary et les foreign key !!

    ci joint mon code pour les varchar si ca peut aider !!
    declare sel_table CURSOR FOR
    select TABLE_NAME = convert(sysname,o.name) from sysobjects o where charindex(substring(o.type,1,1),'U') <> 0

    declare
    @table varchar(255),
    @nomcol varchar(255),
    @length varchar(6)

    OPEN sel_table
    FETCH NEXT FROM sel_table into @table
    WHILE @@FETCH_STATUS = 0
    BEGIN
    declare sel_col cursor for
    SELECT name,length
    from syscolumns
    where id=object_id(@table)
    and xusertype=(select ss_dtype from master.dbo.spt_datatype_info where upper(TYPE_NAME)='VARCHAR')


    open sel_col
    fetch next from sel_col into @nomcol,@length
    while @@FETCH_STATUS =0
    begin
    print 'alter table '+@table+' alter column '+@nomcol+' nvarchar('+@length+')'
    print 'GO'

    fetch next from sel_col into @nomcol,@length
    end
    close sel_col
    DEALLOCATE sel_col
    FETCH NEXT FROM sel_table into @table
    END
    CLOSE sel_table
    DEALLOCATE sel_table

  • signaler à un administrateur
    Commentaire de Escob le 28/05/2007 15:00:33

    autant pour moi, le scripts précédents génère un script garce au print!

    voici le script a exécuter directement :

    /* ATTENTION , ce script passe tous les champs de type varchar de la base de données courrante en nvarchar de la meme longueur */
    /* il faut supprimer tous les objets lié a ces varchar (primary Key, constraint, index ...) */


    declare sel_table CURSOR FOR
    select TABLE_NAME = convert(sysname,o.name) from sysobjects o where charindex(substring(o.type,1,1),'U') <> 0

    declare
    @table varchar(255),
    @nomcol varchar(255),
    @length varchar(6)

    OPEN sel_table
    FETCH NEXT FROM sel_table into @table
    WHILE @@FETCH_STATUS = 0
    BEGIN
    declare sel_col cursor for
    SELECT name,length
    from syscolumns
    where id=object_id(@table)
    and xusertype=(select ss_dtype from master.dbo.spt_datatype_info where upper(TYPE_NAME)='VARCHAR')


    open sel_col
    fetch next from sel_col into @nomcol,@length
    while @@FETCH_STATUS =0
    begin
    execute('alter table '+@table+' alter column '+@nomcol+' nvarchar('+@length+')')

    fetch next from sel_col into @nomcol,@length
    end
    close sel_col
    DEALLOCATE sel_col
    FETCH NEXT FROM sel_table into @table
    END
    CLOSE sel_table
    DEALLOCATE sel_table

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS