Comment puis-je interroger le nom de L'instance courante de la base de données SQL Server?
C'est un peu comme une requête" poule ou œuf", mais quelqu'un peut-il inventer une requête qui peut retourner le nom de l'instance de la base de données actuelle dans laquelle la requête s'exécute? Croyez-moi quand je dis que je comprends le paradoxe: pourquoi avez-vous besoin de connaître le nom de l'instance de la base de données si vous êtes déjà connecté pour exécuter la requête? Audit dans un environnement multi-bases de données.
j'ai regardé tous les @@ globals dans les livres en ligne. " SELECT @@servername
" se rapproche, mais je veux le nom de l'instance de base de données plutôt que sur le serveur.
7 réponses
vous devriez pouvoir utiliser:
SELECT SERVERPROPERTY ('InstanceName')
SELECT
@@servername AS 'Server Name' -- The database server's machine name
,@@servicename AS 'Instance Name' -- e.g.: MSSQLSERVER
,DB_NAME() AS 'Database Name'
,HOST_NAME() AS 'Host Name' -- The database client's machine name
vous pouvez utiliser DB_NAME () :
SELECT DB_NAME()
Je ne suis pas sûr de ce que vous demandiez. Comme vous écrivez cette procédure pour un besoin D'audit, je suppose que vous demandez comment obtenir le nom de la base de données courante lorsque la procédure stockée existe dans une autre base de données. par exemple
USE DATABASE1
GO
CREATE PROC spGetContext AS
SELECT DB_NAME()
GO
USE DATABASE2
GO
EXEC DATABASE1..spGetContext
/* RETURNS 'DATABASE1' not 'DATABASE2' */
c'est le comportement correct, mais pas toujours ce que vous recherchez. Pour contourner cela, vous devez créer le SP dans la base de données principale et marquer la procédure comme une procédure Système. La méthode de faire ceci diffère entre les versions SQL Server Mais voici la méthode pour SQL Server 2005 (il est possible de le faire en 2000 avec la fonction master.dbo.sp_MS_upd_sysobj_category
).
USE MASTER
/* You must begin function name with sp_ */
CREATE FUNCTION sp_GetContext
AS
SELECT DB_NAME()
GO
EXEC sys.sp_MS_marksystemobject sp_GetContext
USE DATABASE2
/* Note - no need to reference master when calling SP */
EXEC sp_GetContext
/* RETURNS 'DATABASE2' */
J'espère que c'est ce que vous cherchiez""