Script pour chger de owner avec MS-SQL
Fermé
vmalep
Messages postés
230
Date d'inscription
jeudi 13 décembre 2001
Statut
Membre
Dernière intervention
25 mai 2008
-
4 févr. 2002 à 14:08
vmalep Messages postés 230 Date d'inscription jeudi 13 décembre 2001 Statut Membre Dernière intervention 25 mai 2008 - 7 févr. 2002 à 00:57
vmalep Messages postés 230 Date d'inscription jeudi 13 décembre 2001 Statut Membre Dernière intervention 25 mai 2008 - 7 févr. 2002 à 00:57
A voir également:
- Script pour chger de owner avec MS-SQL
- Script vidéo youtube - Guide
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Logiciel sql - Télécharger - Bases de données
7 réponses
oui c'est faisable:
Faire un curseur sur la liste des tables
(select name from sysobjects where xtype='U' and name<>'dtproperties')
Pour chaque nom (@tablename) de table de ce curseur, faire:
set @stm = 'EXEC sp_changeobjectowner '''+@nomtable+''', ''sa'''
EXEC(@stm)
(pour faire de 'sa' le propriétaire des tables).
Voilà le principe. Pas le temps de détailler l'utilisation du curseur. Tu trouvera ça dans l'aide du Query Analyzer (SHIFT-F1).
Si tu n'y arrive pas avec les curseurs, demande ici même et je t'expliquerai.
Faire un curseur sur la liste des tables
(select name from sysobjects where xtype='U' and name<>'dtproperties')
Pour chaque nom (@tablename) de table de ce curseur, faire:
set @stm = 'EXEC sp_changeobjectowner '''+@nomtable+''', ''sa'''
EXEC(@stm)
(pour faire de 'sa' le propriétaire des tables).
Voilà le principe. Pas le temps de détailler l'utilisation du curseur. Tu trouvera ça dans l'aide du Query Analyzer (SHIFT-F1).
Si tu n'y arrive pas avec les curseurs, demande ici même et je t'expliquerai.
vmalep
Messages postés
230
Date d'inscription
jeudi 13 décembre 2001
Statut
Membre
Dernière intervention
25 mai 2008
7
4 févr. 2002 à 23:03
4 févr. 2002 à 23:03
Ben, j'y arrive pas avec les curseurs.
Si tu pouvais me donner l'exemple de manière plus concrète, ça me dépannerait peut-être parce que je ne connais pas la syntaxe pour les scripts SQL.
Merci d'avance,
Pierre
Si tu pouvais me donner l'exemple de manière plus concrète, ça me dépannerait peut-être parce que je ne connais pas la syntaxe pour les scripts SQL.
Merci d'avance,
Pierre
Ok... je metterai le code.
Mais peut-être pas aujourd'hui, j'ai pas beaucoup de temps (j'ai des scripts de migration de bases de données à re-tester... :-/
Mais peut-être pas aujourd'hui, j'ai pas beaucoup de temps (j'ai des scripts de migration de bases de données à re-tester... :-/
vmalep
Messages postés
230
Date d'inscription
jeudi 13 décembre 2001
Statut
Membre
Dernière intervention
25 mai 2008
7
6 févr. 2002 à 19:04
6 févr. 2002 à 19:04
Merci et bons tests,
Pierre
Pierre
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Vouaaaaaala !
J'avoue que c'est un peu siouxe (et aussi un peu laid):
DECLARE @CmdStr varchar(4000), @owner nvarchar(256), @objectid int, @username nvarchar(256)
SET @owner = 'dbo'
DECLARE @CurrentTbl sysname
DECLARE TblCursor SCROLL CURSOR FOR select name,id from sysobjects where xtype='U' and name<>'dtproperties'
OPEN TblCursor
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
print '>>> Chaning owner of '+@CurrentTbl
SELECT @username = name from sysusers where uid = OBJECTPROPERTY(@objectid, 'OwnerId')
SET @CmdStr = 'EXEC sp_changeobjectowner ''['+@username+'].['+@CurrentTbl+']'' , '''+@owner+''''
--EXEC( @CmdStr )
print @CmdStr
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
END
CLOSE TblCursor
DEALLOCATE TblCursor
Ce script changera l'owner de toutes les tables d'une base.
Tu peux changer l'owner de destination (SET @owner = 'dbo').
On peut aussi changer l'owner d'autres objets (vue, procédures stockées) en modifiant l'ordre SELECT du curseur.
Le serveur va renvoyer le message:
"Caution: Changing any part of an object name could break scripts and stored procedures.
The object owner has been changed."
Ce message peut être ignoré (sauf si tu as des procédures stockée qui utilisent des objets dont l'owner n'est pas dbo, ce qui est généralement chiant de toute façon. J'évite de ce genre de chose: chez moi, tout appartient à dbo.)
Note que ce script est très dépendant des tables système.
Je ne sais pas si il fonctionnera sur d'autres versions de SQL Server que la mienne (SQL Server 7 sp3).
C'est un peu du bricolage quand même :-)
J'espère que ça pourra t'aider.
J'avoue que c'est un peu siouxe (et aussi un peu laid):
DECLARE @CmdStr varchar(4000), @owner nvarchar(256), @objectid int, @username nvarchar(256)
SET @owner = 'dbo'
DECLARE @CurrentTbl sysname
DECLARE TblCursor SCROLL CURSOR FOR select name,id from sysobjects where xtype='U' and name<>'dtproperties'
OPEN TblCursor
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
print '>>> Chaning owner of '+@CurrentTbl
SELECT @username = name from sysusers where uid = OBJECTPROPERTY(@objectid, 'OwnerId')
SET @CmdStr = 'EXEC sp_changeobjectowner ''['+@username+'].['+@CurrentTbl+']'' , '''+@owner+''''
--EXEC( @CmdStr )
print @CmdStr
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
END
CLOSE TblCursor
DEALLOCATE TblCursor
Ce script changera l'owner de toutes les tables d'une base.
Tu peux changer l'owner de destination (SET @owner = 'dbo').
On peut aussi changer l'owner d'autres objets (vue, procédures stockées) en modifiant l'ordre SELECT du curseur.
Le serveur va renvoyer le message:
"Caution: Changing any part of an object name could break scripts and stored procedures.
The object owner has been changed."
Ce message peut être ignoré (sauf si tu as des procédures stockée qui utilisent des objets dont l'owner n'est pas dbo, ce qui est généralement chiant de toute façon. J'évite de ce genre de chose: chez moi, tout appartient à dbo.)
Note que ce script est très dépendant des tables système.
Je ne sais pas si il fonctionnera sur d'autres versions de SQL Server que la mienne (SQL Server 7 sp3).
C'est un peu du bricolage quand même :-)
J'espère que ça pourra t'aider.
ahum... j'oubliais:
1) faute de frappe :
C'est pas : print '>>> Chaning...
mais : print '>>> Changing
2) oublis:
il faut commenter print @CmdStr
et dé-commenter EXEC( @CmdStr )
sinon forcément ça marchera pas...
(voilà ce que c'est de vouloir aller trop vite :)
1) faute de frappe :
C'est pas : print '>>> Chaning...
mais : print '>>> Changing
2) oublis:
il faut commenter print @CmdStr
et dé-commenter EXEC( @CmdStr )
sinon forcément ça marchera pas...
(voilà ce que c'est de vouloir aller trop vite :)
vmalep
Messages postés
230
Date d'inscription
jeudi 13 décembre 2001
Statut
Membre
Dernière intervention
25 mai 2008
7
7 févr. 2002 à 00:57
7 févr. 2002 à 00:57
Et ça marche! Merci Seb (pour info, je travaille avec SQL2K sp00)
Pierre
Pierre