begin process at 2012 02 08 23:48:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Procédure

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : NHenry

Ecrire un message privé
Site perso
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 



 Sources du même auteur

AJOUTER/SUPPRIMER/LISTER UN COMMENTAIRE À UN CHAMP D'UNE TAB...

 Sources de la même categorie

IMPORTATION DE FICHIER TEXT (CSV) RAPIDEMENT par vladam
Source avec une capture T-SQL - SPLIT SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
[ORACLE]DÉTERMINER LA DATE DU PREMIER JOUR D'UNE SEMAINE PAR... par Bouillou2
T-SQL - PROCÉDURE - STOCKÉE - PLACER DANS UNE TABLE LE RÉSUL... par zavier666

 Sources en rapport avec celle ci

Source avec une capture T-SQL - SPLIT SANS TABLE TEMPORAIRE par TheOnlyMaX
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
REQUÊTE SQL POUR DÉTERMINER L'ESPACE OCCUPÉ DANS LES TABLESP... par sgoriaud
Source avec Zip LISTE DES PAYS DU MONDE EN FRANÇAIS/ANGLAIS DANS UNE BASE SQ... par Joe_le_mort
AJOUTER/SUPPRIMER/LISTER UN COMMENTAIRE À UN CHAMP D'UNE TAB... par NHenry

Commentaires et avis

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

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales