2016-12-09 1 views
0

L'appelant de la procédure qui est dans la base de données AAA: -Comment connaître la dernière base de données avant une procédure (dans une autre base de données) a été appelée

use AAA 
exec BBB.dbo.ap_MyProc 

La procédure étant appelée qui est dans la base de données BBB: -

use BBB 
create procedure ap_MyProc as 
print 'We want a way to return the database name AAA' 

Tout conseil serait apprécié.

+0

Quels sont les dbms que vous utilisez? (C'est la fonctionnalité spécifique au produit.) – jarlh

+0

SQL Server. Ce serait bien si la réponse est compatible avec 2008 mais je prendrai également les réponses de 2012. Merci – Julian

Répondre

0

Votre procédure stockée peut-elle être modifiée? Si oui, je pense que vous pouvez éditer les procédures stockées et ajouter un paramètre supplémentaire pour le nom de la base de données.

Et pendant l'appel de la procédure stockée, vous devez passer le db_name() dans le nouveau paramètre, afin que votre procédure stockée pouvait savoir quelle base de données est l'appeler

DECLARE @ServerName varchar(50) = db_name() 

EXEC [dbo].[SP] @newParams = @ServerName 
+0

Cette solution de contournement n'est pas réalisable dans notre scénario car les procédures appelées dans la base de données BBB sont exécutées à partir de raccourcis clavier. – Julian

+0

Quelle est la signification d'un raccourci clavier? – SKLTFZ

+0

Vous pouvez spécifier des raccourcis de requête et les affecter au clavier dans SQL Server Management Studio (Outils, Options, Clavier, Raccourcis de requête). Donc, par exemple, j'ai ma propre 'sp_helptext2' là-bas. Les limitations imposées des touches de raccourci est un sujet entier en soi et pas un à entrer ici. – Julian

0

Eh bien je peux maintenant répondre à ma propre question. Nous pouvons exploiter syslockinfo ...

declare @db_name varchar(255) 

select 
    @db_name = db_name(rsc_dbid) 
from 
    master.dbo.syslockinfo 
where 
    req_spid = @@SPID 
    and req_ownertype = 4 --"exSession" 
    and rsc_dbid <> db_id() 

select @db_name = isnull(@db_name, db_name()) 

print @db_name 

Fonctionne également dans SQL 2008. :)