2010-02-04 7 views
4

Existe-t-il quelque chose dans SQL Server similaire à USE (pour basculer les bases de données) qui peut contrôler le préfixe du propriétaire utilisé pour les tables? Par exemple, nous avons une application qui insiste sur la création de tables "theServiceAccount.TheTableName"; Ce que nous voulons vraiment, c'est le forcer à mettre les noms de tables sous dbo ... donc "dbo.TheTableName". Nous n'avons pas un bon moyen de changer le SQL que l'application exécute (elle est vendue), à ​​part un hook au démarrage qui nous permet d'exécuter du SQL. Donc, ce serait génial si nous pouvions lancer un sql à ce moment-là, ce qui rendrait par la suite create table (ou d'autres opérations) par défaut à dbo au lieu du compte de service utilisé.Propriétaire de la table SQL Server - modification de la valeur par défaut

Je me rends compte que la syntaxe create table permet de spécifier le propriétaire, mais cela ne semble pas être une option à ce stade. De ce que je peux dire, le SQL que cette application génère ne spécifie jamais le propriétaire; il a juste le nom de la table dans le SQL qu'il exécute.

Merci!

+2

Pour SQL 2005 ce préfixe ne signifie plus le propriétaire, cela signifie le schéma. – Andrew

Répondre

3

En 2005, par défaut, chaque utilisateur a son propre schéma par défaut, sauf indication contraire.

Cela devrait faire ce que vous avez besoin:

USE databasename 
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo 

Vous pouvez également modifier ce via SSMS en regardant les propriétés de l'utilisateur et la modification du schéma par défaut

+0

qui a fait l'affaire! – TheToasterThatCould

0

Je crois que vous pouvez le faire en créant un utilisateur avec le schéma par défaut que vous voulez et ensuite utiliser l'instruction EXECUTE AS (voir http://msdn.microsoft.com/en-us/library/ms181362.aspx)

Dans votre exemple, vous pouvez créer un utilisateur (ou utiliser dbo, non conseillé) appelé 'specialDBO' dont le schéma par défaut est défini sur dbo. Ensuite, vous avez quelque chose comme ceci:

 USE [myfabdb]; 
    EXECUTE AS USER = 'speicalDBO'; 

    ... blah blah blah... 

    REVERT; 

Rappelez-vous, vous ne pouvez pas avoir la déclaration USE après la déclaration EXECUTE AS.

Questions connexes