dwj*_*wjv 8 sql-server sql-server-2008-r2 linked-server openrowset exec
这似乎是一个基本问题,但我找不到任何答案 - 我需要能够从链接服务器获取服务器名称/实例等。我尝试了几件事:
select <linked server>.@@SERVERNAME;
select <linked server>.SERVERPROPERTY('ServerName');
Run Code Online (Sandbox Code Playgroud)
......但没有快乐。有任何想法吗?
这是SQL 2008 R2
& 2014
(2008R2
是链接服务器)
编辑:错误是:
消息 102,级别 15,状态 1,第 2 行“@@SERVERNAME”附近的语法不正确。
Aar*_*and 11
一些稍短(更自然,恕我直言)的方法:
EXEC LinkedServer.[master].sys.sp_executesql N'SELECT @@VERSION;';
Run Code Online (Sandbox Code Playgroud)
或者:
EXEC('SELECT @@VERSION;') AT LinkedServer;
Run Code Online (Sandbox Code Playgroud)
我更喜欢这sp_executesql
条路线,因为:
它仍然允许使用强类型参数,而不是处理各种字符串连接、单引号转义等。
在该路径中指定特定数据库很容易,而不必在查询中引用的所有对象上放置数据库前缀。是的,您可以动态定义数据库:
DECLARE @db SYSNAME, @exec NVARCHAR(1024);
SET @db = N'tempdb';
SET @exec = N'LinkedServer.' + QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec N'SELECT @@VERSION, DB_NAME();';
Run Code Online (Sandbox Code Playgroud)
如果需要,链接服务器名称也是:
DECLARE @srv SYSNAME, @db SYSNAME, @exec NVARCHAR(1024);
SET @srv = N'LinkedServer';
SET @db = N'tempdb';
SET @exec = QUOTENAME(@srv) + N'.' + QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec N'SELECT @@VERSION, DB_NAME();';
Run Code Online (Sandbox Code Playgroud)您可以OPENQUERY
按照 MSDN 中的说明使用来获取链接服务器的信息:
即使用 OPENQUERY ( linked_server ,'query' )
类似下面的内容将使用sys.dm_exec_connections
dmv为您提供服务器名称
SELECT * FROM OPENQUERY (
linkedservername,
'SELECT
@@SERVERNAME AS TargetServerName,
SUSER_SNAME() AS ConnectedWith,
DB_NAME() AS DefaultDB,
client_net_address AS IPAddress
FROM
sys.dm_exec_connections
WHERE
session_id = @@SPID
')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16638 次 |
最近记录: |