|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 156 ![]() |
Bonjour, j'ai bloqué aujourd'hui sur un problème qui parait tout simple au premier abord. A la base, j'ai plus un profil développeur JAVA, et le transact-SQL est en train de me faire vivre un calvaire !
Alors j'essaie d'expliquer (si j'arrive à faire un copier-coller de mon code, et passer le filtrage web du client pour arriver ici demain, j'essaierai d'ajouter un bout de code pour illustrer) : Premièrement, je remplis une table toto(nomtable varchar(128), nomcol varchar(128)). Cette table contient des noms de table, et des noms de colonne qui existent dans la base. Deuxièmement, je déclare un curseur qui alimente deux parametres de type varchar(128) @nomtable, @nomcol, a partir des lignes de la table toto. Jusque là rien de particulier. A chaque, ligne ramenée par le curseur, je souhaite effectuer une opération sur la colonne @nomcol, de la table @nomtable (trouver le min et le max en fait). J'espere que vous avez pû suivre jusque là. Si je lance une requête par exemple : 'select * from @nomtable'. J'obtiens une erreur qui me dit que la variable de type 'table' @nomtable n'est pas définie. OK, c'est assez logique en fait, puisque @nomtable est déclaré comme varchar(128). Donc j'essaie autre chose du type : 'select * from object_id(@nomtable, 'U')'... ça ne fonctionne pas non plus. En fait je n'arrive pas à récupérer un 'objet' de type 'table' à partir du nom de la table contenu dans @nomtable (pour m'exprimer autrement). Bref, je ne vois pas comment itérer sur ma liste de table/colonne, et effectuer des requêtes pour chaque enregistrement. Quelqu'un a-t-il une solution (élégante) ?
__________________
JAVA le dire a tout le monde |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() |
Bonjour vous devez passer par du SQL dynamique:
Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Bonjour,
La syntaxe SELECT * FROM @nomTable ne fonctionne pas. Il faudra utiliser une requête dynamique du genre : Vous pouvez néanmoins éviter les curseurs pour cela mais il faudrait avoir plus de précision sur votre but final. Par exemple il est possible de chercher le min et le max d'une colonne pour une table concernée de la façon suivante dans votre cas : Code :
|
||
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 156 ![]() |
Merci beaucoup pour l'info sur les requêtes dynamiques.
Ce script sert à ramener la valeur minimum des clefs primaires des tables à 1, et à modifier toutes les autres valeurs de la clef primaire par ('valeur clef' - 'valeur min clef' +1). Ensuite les valeurs de 'foreign key', qui référencent ces clefs primaires sont également mises à jour. Pour ce point, je n'ai pas de contrainte 'UPDATE ON CASCADE', et on ne m'autorise pas à modifier cette contrainte. ce script m'a été demandé pour des besoins de migration d'environnement. Ci-dessous le script sans prendre en compte la notion de requête dynamique. Code :
__________________
JAVA le dire a tout le monde |
||
|
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() ![]() |
Citation:
Attention à l'utilisation de PRINT ! il ya une limitation de 8000 caractères pour les chaines de caratères non unicode et 4000 pour les chaines de caractères unicode |
|||
|
00
|
|
|
#6 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Oui c'était juste là à titre d'exemple pour yozine. Mais c'est bien de le rappeler également.
++ |
|
00
|
Copyright © 2000-2012 - www.developpez.com