sql-server - 在链接服务器上运行动态查询
问题描述
我想知道,是否有可能使这项工作?
declare @SQL varchar(max),
@query varchar(max) ='select * from Table'
select @SQL='USE LinkedServer.DBName ' + @query'
exec (@SQL)
如果您用于'USE'
在同一台服务器上运行查询,但不能在链接服务器上运行,它工作得很好。
我想要的是创建将在不同的服务器和数据库上运行一些动态查询的过程,并且我想将 ServerName 和 DBName 作为参数传递给该 sp。
注意:我不想这样使用它:
declare @SQL varchar(max)
select @SQL='
select * from LinkedServer.DBName..Table'
exec (@SQL)
由于该选择语句将从表中检索
解决方案
当然,执行远程数据库的鲜为人知的技巧sp_executesql
:
DECLARE @LinkedServer sysname = N'LinkedServer',
@DatabaseName sysname = N'DBName';
-- above are input params
DECLARE @exec nvarchar(4000), @sql nvarchar(max);
SET @sql = N'SELECT * FROM dbo.Table;';
-- or SELECT @sql = DynamicSQL FROM dbo.SomeLocalTable WHERE...
SET @exec = QUOTENAME(@LinkedServer) + N'.'
+ QUOTENAME(@DatabaseName)
+ N'.sys.sp_executesql';
EXEC @exec @sql;
不要使用括号。EXEC('string')
是邪恶的,邪恶的,邪恶的。
推荐阅读
- java - 无法杀死一些突变
- python - __init__ 方法运行多次
- r - slurmR 尝试运行示例作业“调用 `silent_system2` 时发生错误:”
- laravel - 您如何使用此 GitHub Actions 工作流程设置 PHP 版本?
- asp.net-core - 为什么 for 循环会意外地完成 Razor 中的迭代?
- ios - ios快捷方式应用程序中未识别/显示意图摘要-仅标题
- python-3.x - 使用 python 和 pandas 从 html 表中的另一种日期格式转换为 Excel“日期”格式(在 Excel 文件中)
- python - 如何在不删除以前数据的情况下将新数据附加到我的 .csv 文件中
- c# - FormatException:无法从 BsonType 'ObjectId' 反序列化 'Guid'
- python - pygame 中显示的文本如何居中?