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 : 4 386

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 

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

Changer le propriétaire d'une SP sous SQL Server [ par Nix ] Salut tout le monde,Ce soir on m'a posé une colle. Je ne suis pas expert SQL Server et je ne sais pas répondre à cette question.La question est simple Requete SQL via Siebel [ par riri13 ] Bonjour,Dans la société ou je travail nous utilisons Siebel surcouche d'oracle.Je dois faire des extraction de données pour le reporting mais je ne di Oracle vs Sql server vs Access [ par Fildomen ] salutpouvez-vous me donner le comparatif entre ces trois (Oracle,Sql server,Access)?? et qui es le plus rapide entre eux(un classement)?mercihttp://ww utilisation de sql server?? [ par Fildomen ] salutj'ai installé mon sql server 2000, sur un windows server 2003 datacenter, et là , j'ai consataté que c'est difficile de l'utiliser, je sais même Problème SQLSERVER/php [ par LeJulius ] Je travaille actuellement sous SQL SERVER 2000 en lien avec du PHP 4.2.0 Mon problème est le suivant :Mes tables sql contiennent des caractères accent Autoincrementation dans SQL server [ par superismali ] SuperismaliSlt,J'ai un pb pour créer une auto incrementation d'un champ nommé idsite dans une table ke G nommé référencement.Bon y at il qq1 ki pe m'a sql server ou Mysql [ par snoopcool ] Bonjour tous le monde!!!Mon proleme est le suivant. J'ai une base de donnée que je ve mettre sur un serveur avec une vingtaine de poste à connecte et Problème avec l'opérateur LIKE dans SQL SERVER [ par oluha ] BonjourJ'ai un petit problème avec une procédure stockée sur SQL server.Dans celle ci j'utilise une requete de type :select count(*) from matable wher LPAD, RPAD avec SQl server? [ par karn ] Bonjour,Il y a t'il un equivalent aux fonctionx LPAD,RPAD avec sql server? DATETIME SQL SERVER AU SECOURS !!!!!! [ par MACHOMAN ] bonjour, j'ai plusieurs pb avec les datetime sous sql server : 1 - j'ai deux champs datetime, dans le premier il y a une date dans le second une heure


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.