J'ai ces 2 requetes :
/************ List table in AHD_Repli Data Base ************/
SELECT [name]
FROM [AHD_Repli].[dbo].[sysobjects]
WHERE xtype='U'
/************ End List table in AHD_Repli Data Base ************/
/************ Change owner table in AHD_Repli Data Base ************/
exec sp_changeobjectowner 'dbo.cause', 'AHD'
/************ End Change owner table in AHD_Repli Data Base ************/
j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de
faire un changeobjectowner par table.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred.M.
Bonjour Olivier,
Tu peux en effet y parvenir en un seul script. Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque occurence de ta boucle de curseur, tu peux récupérer de façon itérative le nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon :
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux d'avantage d'informations sur les curseurs.
Bon script :) Fred.
"OlivierT" a écrit :
Bonjour,
J'ai ces 2 requetes : /************ List table in AHD_Repli Data Base ************/ SELECT [name] FROM [AHD_Repli].[dbo].[sysobjects] WHERE xtype='U' /************ End List table in AHD_Repli Data Base ************/
/************ Change owner table in AHD_Repli Data Base ************/ exec sp_changeobjectowner 'dbo.cause', 'AHD' /************ End Change owner table in AHD_Repli Data Base ************/
j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de faire un changeobjectowner par table.
Quelqu'un aurait-il une idee ??
Merci,
Olivier
Bonjour Olivier,
Tu peux en effet y parvenir en un seul script.
Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque
occurence de ta boucle de curseur, tu peux récupérer de façon itérative le
nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon
:
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux
d'avantage d'informations sur les curseurs.
Bon script :)
Fred.
"OlivierT" a écrit :
Bonjour,
J'ai ces 2 requetes :
/************ List table in AHD_Repli Data Base ************/
SELECT [name]
FROM [AHD_Repli].[dbo].[sysobjects]
WHERE xtype='U'
/************ End List table in AHD_Repli Data Base ************/
/************ Change owner table in AHD_Repli Data Base ************/
exec sp_changeobjectowner 'dbo.cause', 'AHD'
/************ End Change owner table in AHD_Repli Data Base ************/
j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de
faire un changeobjectowner par table.
Tu peux en effet y parvenir en un seul script. Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque occurence de ta boucle de curseur, tu peux récupérer de façon itérative le nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon :
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux d'avantage d'informations sur les curseurs.
Bon script :) Fred.
"OlivierT" a écrit :
Bonjour,
J'ai ces 2 requetes : /************ List table in AHD_Repli Data Base ************/ SELECT [name] FROM [AHD_Repli].[dbo].[sysobjects] WHERE xtype='U' /************ End List table in AHD_Repli Data Base ************/
/************ Change owner table in AHD_Repli Data Base ************/ exec sp_changeobjectowner 'dbo.cause', 'AHD' /************ End Change owner table in AHD_Repli Data Base ************/
j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de faire un changeobjectowner par table.
Quelqu'un aurait-il une idee ??
Merci,
Olivier
OlivierT
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
Bonjour Olivier,
Tu peux en effet y parvenir en un seul script. Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque occurence de ta boucle de curseur, tu peux récupérer de façon itérative le nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon :
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux d'avantage d'informations sur les curseurs.
Bon script :) Fred.
"OlivierT" a écrit :
> Bonjour, > > J'ai ces 2 requetes : > /************ List table in AHD_Repli Data Base ************/ > SELECT [name] > FROM [AHD_Repli].[dbo].[sysobjects] > WHERE xtype='U' > /************ End List table in AHD_Repli Data Base ************/ > > /************ Change owner table in AHD_Repli Data Base ************/ > exec sp_changeobjectowner 'dbo.cause', 'AHD' > /************ End Change owner table in AHD_Repli Data Base ************/ > > j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de > faire un changeobjectowner par table. > > Quelqu'un aurait-il une idee ?? > > Merci, > > Olivier
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
Bonjour Olivier,
Tu peux en effet y parvenir en un seul script.
Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque
occurence de ta boucle de curseur, tu peux récupérer de façon itérative le
nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon
:
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux
d'avantage d'informations sur les curseurs.
Bon script :)
Fred.
"OlivierT" a écrit :
> Bonjour,
>
> J'ai ces 2 requetes :
> /************ List table in AHD_Repli Data Base ************/
> SELECT [name]
> FROM [AHD_Repli].[dbo].[sysobjects]
> WHERE xtype='U'
> /************ End List table in AHD_Repli Data Base ************/
>
> /************ Change owner table in AHD_Repli Data Base ************/
> exec sp_changeobjectowner 'dbo.cause', 'AHD'
> /************ End Change owner table in AHD_Repli Data Base ************/
>
> j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de
> faire un changeobjectowner par table.
>
> Quelqu'un aurait-il une idee ??
>
> Merci,
>
> Olivier
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
Bonjour Olivier,
Tu peux en effet y parvenir en un seul script. Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque occurence de ta boucle de curseur, tu peux récupérer de façon itérative le nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon :
voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux d'avantage d'informations sur les curseurs.
Bon script :) Fred.
"OlivierT" a écrit :
> Bonjour, > > J'ai ces 2 requetes : > /************ List table in AHD_Repli Data Base ************/ > SELECT [name] > FROM [AHD_Repli].[dbo].[sysobjects] > WHERE xtype='U' > /************ End List table in AHD_Repli Data Base ************/ > > /************ Change owner table in AHD_Repli Data Base ************/ > exec sp_changeobjectowner 'dbo.cause', 'AHD' > /************ End Change owner table in AHD_Repli Data Base ************/ > > j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de > faire un changeobjectowner par table. > > Quelqu'un aurait-il une idee ?? > > Merci, > > Olivier
Fred.M.
Dans la mesure où il s'agit de faire un traitement itératif pour chacune de tes tables, perso je ne vois pas comment faire autrement qu'avec des curseurs. si tu veux un exemple, j'ai là dans mes scripts un exemple qui me sert à faire un bilan de volumétrie pour chacune des tables d'1 base donnée. Tu peux t'en inspirer....
-- On récupère dans le curseur le nom des tables de Prod. DECLARE C_Table CURSOR FOR SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name
-- Ouverture du curseur OPEN C_Table
-- Balayage du curseur FETCH NEXT FROM C_Table INTO @Table_Name
-- On boucle tant qu'on a des tables à traiter WHILE @@FETCH_STATUS = 0 BEGIN -- Traitement pour le nom d'une table set @ChaineSQL = 'EXEC sp_spaceused ''' + @Table_Name + '''' EXEC sp_executesql @ChaineSQL
-- Balayage du curseur pour la ligne suivante FETCH NEXT FROM C_Table INTO @Table_Name END
-- Fermeture du curseur CLOSE C_Table DEALLOCATE C_Table GO
"OlivierT" a écrit :
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
> Bonjour Olivier, > > Tu peux en effet y parvenir en un seul script. > Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque > occurence de ta boucle de curseur, tu peux récupérer de façon itérative le > nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon > : > > set @ChaineSQL = 'exec sp_changeobjectowner ''[' + @Table_Name + ']'', > ''AHD'''' > EXEC sp_executesql @ChaineSQL > > voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux > d'avantage d'informations sur les curseurs. > > Bon script :) > Fred. > > > "OlivierT" a écrit : > > > Bonjour, > > > > J'ai ces 2 requetes : > > /************ List table in AHD_Repli Data Base ************/ > > SELECT [name] > > FROM [AHD_Repli].[dbo].[sysobjects] > > WHERE xtype='U' > > /************ End List table in AHD_Repli Data Base ************/ > > > > /************ Change owner table in AHD_Repli Data Base ************/ > > exec sp_changeobjectowner 'dbo.cause', 'AHD' > > /************ End Change owner table in AHD_Repli Data Base ************/ > > > > j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de > > faire un changeobjectowner par table. > > > > Quelqu'un aurait-il une idee ?? > > > > Merci, > > > > Olivier
Dans la mesure où il s'agit de faire un traitement itératif pour chacune de
tes tables, perso je ne vois pas comment faire autrement qu'avec des
curseurs. si tu veux un exemple, j'ai là dans mes scripts un exemple qui me
sert à faire un bilan de volumétrie pour chacune des tables d'1 base donnée.
Tu peux t'en inspirer....
-- On récupère dans le curseur le nom des tables de Prod.
DECLARE C_Table CURSOR FOR
SELECT name FROM sysobjects
WHERE type = 'U'
ORDER BY name
-- Ouverture du curseur
OPEN C_Table
-- Balayage du curseur
FETCH NEXT FROM C_Table
INTO @Table_Name
-- On boucle tant qu'on a des tables à traiter
WHILE @@FETCH_STATUS = 0
BEGIN
-- Traitement pour le nom d'une table
set @ChaineSQL = 'EXEC sp_spaceused ''' + @Table_Name + ''''
EXEC sp_executesql @ChaineSQL
-- Balayage du curseur pour la ligne suivante
FETCH NEXT FROM C_Table INTO @Table_Name
END
-- Fermeture du curseur
CLOSE C_Table
DEALLOCATE C_Table
GO
"OlivierT" a écrit :
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
> Bonjour Olivier,
>
> Tu peux en effet y parvenir en un seul script.
> Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque
> occurence de ta boucle de curseur, tu peux récupérer de façon itérative le
> nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon
> :
>
> set @ChaineSQL = 'exec sp_changeobjectowner ''[' + @Table_Name + ']'',
> ''AHD''''
> EXEC sp_executesql @ChaineSQL
>
> voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux
> d'avantage d'informations sur les curseurs.
>
> Bon script :)
> Fred.
>
>
> "OlivierT" a écrit :
>
> > Bonjour,
> >
> > J'ai ces 2 requetes :
> > /************ List table in AHD_Repli Data Base ************/
> > SELECT [name]
> > FROM [AHD_Repli].[dbo].[sysobjects]
> > WHERE xtype='U'
> > /************ End List table in AHD_Repli Data Base ************/
> >
> > /************ Change owner table in AHD_Repli Data Base ************/
> > exec sp_changeobjectowner 'dbo.cause', 'AHD'
> > /************ End Change owner table in AHD_Repli Data Base ************/
> >
> > j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de
> > faire un changeobjectowner par table.
> >
> > Quelqu'un aurait-il une idee ??
> >
> > Merci,
> >
> > Olivier
Dans la mesure où il s'agit de faire un traitement itératif pour chacune de tes tables, perso je ne vois pas comment faire autrement qu'avec des curseurs. si tu veux un exemple, j'ai là dans mes scripts un exemple qui me sert à faire un bilan de volumétrie pour chacune des tables d'1 base donnée. Tu peux t'en inspirer....
-- On récupère dans le curseur le nom des tables de Prod. DECLARE C_Table CURSOR FOR SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name
-- Ouverture du curseur OPEN C_Table
-- Balayage du curseur FETCH NEXT FROM C_Table INTO @Table_Name
-- On boucle tant qu'on a des tables à traiter WHILE @@FETCH_STATUS = 0 BEGIN -- Traitement pour le nom d'une table set @ChaineSQL = 'EXEC sp_spaceused ''' + @Table_Name + '''' EXEC sp_executesql @ChaineSQL
-- Balayage du curseur pour la ligne suivante FETCH NEXT FROM C_Table INTO @Table_Name END
-- Fermeture du curseur CLOSE C_Table DEALLOCATE C_Table GO
"OlivierT" a écrit :
Merci pour ta reponse. Est-il possible de se passer du curseur ?
Olivier
"Fred.M." a écrit :
> Bonjour Olivier, > > Tu peux en effet y parvenir en un seul script. > Pour ce faire, tu dois utiliser les curseurs (FETCH). Ainsi, pour chaque > occurence de ta boucle de curseur, tu peux récupérer de façon itérative le > nom de toutes tes tables et les intégrer dans du SQL dynamique de cette façon > : > > set @ChaineSQL = 'exec sp_changeobjectowner ''[' + @Table_Name + ']'', > ''AHD'''' > EXEC sp_executesql @ChaineSQL > > voir http://msdn2.microsoft.com/fr-fr/library/ms180169.aspx si tu veux > d'avantage d'informations sur les curseurs. > > Bon script :) > Fred. > > > "OlivierT" a écrit : > > > Bonjour, > > > > J'ai ces 2 requetes : > > /************ List table in AHD_Repli Data Base ************/ > > SELECT [name] > > FROM [AHD_Repli].[dbo].[sysobjects] > > WHERE xtype='U' > > /************ End List table in AHD_Repli Data Base ************/ > > > > /************ Change owner table in AHD_Repli Data Base ************/ > > exec sp_changeobjectowner 'dbo.cause', 'AHD' > > /************ End Change owner table in AHD_Repli Data Base ************/ > > > > j'aurai voulu mettre ces 2 requetes en une seule de facon a m'eviter de > > faire un changeobjectowner par table. > > > > Quelqu'un aurait-il une idee ?? > > > > Merci, > > > > Olivier