Rechercher : dans
Par :

Script pour chger de owner avec MS-SQL

Dernière réponse le 7 fév 2002 à 00:57:01 vmalep, le 4 fév 2002 à 14:08:29 
 Signaler ce message aux modérateurs

Bonjour, quelqu'un connait-il un script sql qui permet de changer le owner de toutes les tables d'une DB avec MS-SQL?

Merci d'avance,
Pierre

Meilleures réponses pour « script pour chger de owner avec MS SQL » dans :
[IE] Erreur de script / Effectuer un débogage VoirDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un débogage...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
Script pour assembler 2 photos VoirVous vous demandez comment assembler deux photos? Il y a bien The Gimp mais c'est long... Pour ceux que la ligne de commande ne rebute pas, voici un petit script qui va vous permettre d'assembler deux images ou plus (il vous suffit de modifier le...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

sebsauvage, le 4 fév 2002 à 16:11:57

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.

Répondre à sebsauvage

2

vmalep, le 4 fév 2002 à 23:03:38

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

Répondre à vmalep

3

sebsauvage, le 5 fév 2002 à 09:06:47

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... :-/

Répondre à sebsauvage

4

vmalep, le 6 fév 2002 à 19:04:19

Merci et bons tests,
Pierre

Répondre à vmalep

5

sebsauvage, le 6 fév 2002 à 19:45:52

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.

Répondre à sebsauvage

6

sebsauvage, le 6 fév 2002 à 19:48:25

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 :)

Répondre à sebsauvage

7

 vmalep, le 7 fév 2002 à 00:57:01

Et ça marche! Merci Seb (pour info, je travaille avec SQL2K sp00)
Pierre

Répondre à vmalep