有没有办法检索
来自SQL Server存储过程?
我想做的是以下内容:
OPENDATASOURCE
检索只能作为用户Y检索的数据。不幸的是,Y不能被硬编码,因为它是一个参数。数据库应该部署到多个客户,并由他们复制多次,等等。因此,我 CAN NOT HARDCODE 数据库服务器的名称或数据库的名称
(我知道这有点像糟糕的设计。我无能为力。)
答案 0 :(得分:7)
答案 1 :(得分:1)
使用SELECT db_name();
作为数据库名称,使用SELECT @@SERVERNAME;
作为服务器名称
答案 2 :(得分:1)
我不确定你的目标是什么,但有一些内在因素可能符合你的需要:
select DB_NAME(), @@SERVERNAME
如果您愿意,可以将这些包装在带有参数的过程中,或者根据需要在常规查询中使用它们。
要注意的一件事是@@ SERVERNAME是服务器的名称,不一定是托管服务器的物理计算机名称。当您在一台计算机上托管多个实例或开始将应用程序移动到SqlAzure时,这变得更加重要。
答案 3 :(得分:1)
可以从SERVERPROPERTY(属性)函数中检索计算机名称
create function getComputerName() return varchar(128) begin return select serverproperty('ServerName') end
现有的DB_NAME()函数返回数据库名称
create function getDatabaseName() return varchar(128) begin return db_name() end
答案 4 :(得分:1)
我实际上认为有更好的解决方案。而不是查找服务器和数据库名称,使用新用户打开与该数据库的新连接,然后查询,只是为了关闭连接并恢复到原始调用,为什么不利用SqlServer的“EXECUTE AS”子句:< / p>
CREATE USER me WITHOUT LOGIN
GO
CREATE PROCEDURE foo
@UserToQueryAs SYSNAME
AS
BEGIN
-- Do stuff as calling user
EXECUTE AS USER = @UserToQueryAs;
-- Do stuff as @UserToQueryAs
SELECT USER_NAME();
REVERT;
-- Do more stuff as calling user
END
GO
exec foo 'me'
以上示例导致:me