[英]Pass a binary variable to a linked server using OPENQUERY
我使用的是 SQL Server 2019,我使用链接服务器连接到另一个 SQL Server。
我需要在链接服务器上运行一个系统函数,我正在使用OPENQUERY
在链接服务器上运行该函数,这在很多情况下都运行良好。 但是,其中一个函数需要一个BINARY
参数。 我不知道如何使用OPENQUERY
将二进制变量传递给链接服务器。 请问有人可以帮忙吗? 请参阅下面的代码示例。
DECLARE @To_LSN AS binary(10);
DECLARE @To_LSN_Timestamp datetime;
SELECT @To_LSN = ReturnValue
FROM OPENQUERY (LNK_SQL_SERVER,
'SELECT MY_DB.sys.fn_cdc_get_max_lsn() AS ReturnValue;');
SELECT @To_LSN_Timestamp = ReturnValue
FROM OPENQUERY (LNK_SQL_SERVER,
'SELECT MY_DB.sys.fn_cdc_map_lsn_to_time(@To_LSN) AS ReturnValue;');
-- it won't accept the @To_LSN as a parameter.
在上面的第二个查询中,函数需要一个二进制参数 ( @To_LSN
),因此如果我尝试将查询拆分为动态 SQL,它会抛出错误,因为varchar
和binary
之间的转换失败。
如果您只需要 LSN 时间戳,为什么不一步完成并避免任何字符串或二进制转换/连接?
SELECT @To_LSN_Timestamp = ReturnValue
FROM OPENQUERY
(
LNK_SQL_SERVER,
N'SELECT MY_DB.sys.fn_cdc_map_lsn_to_time(
MY_DB.sys.fn_cdc_get_max_lsn()
) AS ReturnValue;');
更好的是:
EXEC LNK_SQL_SERVER.MY_DB.sys.sp_executesql
N'SELECT @rv = sys.fn_cdc_map_lsn_to_time(
sys.fn_cdc_get_max_lsn());',
N'@rv datetime OUTPUT',
@rv = @To_LSN_Timestamp OUTPUT;
如果您同时需要 LSN 和外部时间戳,那么:
EXEC LNK_SQL_SERVER.MY_DB.sys.sp_executesql
N'SELECT @lsn = sys.fn_cdc_get_max_lsn();
SELECT @rv = sys.fn_cdc_map_lsn_to_time(@lsn);',
N'@lsn binary(10) output, @rv datetime OUTPUT',
@lsn = @To_LSN OUTPUT,
@rv = @To_LSN_Timestamp OUTPUT;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.