【问题标题】:Bypassing character limit on OPENQUERY failing use EXECUTE绕过 OPENQUERY 失败的字符限制使用 EXECUTE
【发布时间】:2019-05-30 20:57:45
【问题描述】:

我目前正在使用 SQL Server Management Studio 17 连接到 Oracle 数据库实例,然后提取一些数据并将其插入到我拥有的 SQL Server 表中。

我已尝试执行以下操作:

DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
SELECT * INTO [jerry].[dbo].[purchases] FROM OPENQUERY(OLAP, '

    proprietary sql code

');

但是 SQL 代码大约有 9500 个字符,因此 OPENQUERY 失败,MSDN articles 支持

我参考了这些网站:

并了解到我可以使用EXEC 来实现我的目标。 我试图实现以下内容:

EXEC master.dbo.sp_serveroption @server=N'OLAP', @optname=N'rpc out', @optvalue=N'true'
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sql code'


DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
EXEC @sqlcode AT OLAP

但是,我仍然收到 Invalid Syntax near OLAP 错误。 我已经确认 OLAP 是我们 DBA 的正确名称,其他 OPENQUERY 函数工作正常(使用更短的 SQL 语句)。

  • 我无法编辑 SQL 查询
  • 我无法编辑外部 OLAP 的数据库权限(我不是 DBA,也不属于安全组)

非常感谢任何帮助。

【问题讨论】:

标签: sql sql-server oracle tsql ssms


【解决方案1】:

不带括号的 EXEC 运行存储过程。

那就试试吧:

truncate table [jerry].[dbo].[purchases]

insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at olap

execute

【讨论】:

  • 用户似乎没有修改链接服务器的权限。通常,系统管理员会运行该命令。
  • 我如何在此处使用EXEC 更新我的表格,您可以编辑您的答案以表明我可以接受吗?
  • 如何在此处使用EXEC 更新我的表格,您可以编辑您的答案以显示我可以接受吗?目前,这向我显示了正确的行,但没有创建 [jerry].[dbo].[purchases]
  • 而不是 SELECT .. INTO 你只是截断表并运行 INSERT ... EXEC
  • 非常感谢@DavidBrowne 的建议。奇怪的是,它告诉我我找不到它或者我没有权限(这是不可能的,因为我是设置它的人)。但我会继续研究。叹息...谢谢!!
猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多