【问题标题】:Overcoming 8000 limit in openrowset克服 openrowset 中的 8000 限制
【发布时间】:2015-04-12 21:42:23
【问题描述】:

我需要通过 openrowset 从 MS SQL Server 访问 Teradata 数据库。但是我的脚本有 8000 多个字符(实际上几乎是两倍)。这是脚本示例:

select * from openrowset('MSDASQL','DWH'; 'login'; 'pass', 
'select * FROM DATABASE.TABLE')

我试图通过将脚本分成两部分来克服这个限制,然后使用 EXEC 命令:

DECLARE
@strSQL1 varchar(8000),
@strSQL2 varchar(8000)

SELECT
@strSQL1 = 
'select * from openrowset(''MSDASQL'',''DWH''; ''login''; ''pass'', ',
@strSQL2 = 
'''select * FROM DATABASE.TABLE'')'

EXEC (@strSQL1 + @strSQL2)

但这不起作用,因为openrowset语句中的SQL命令仍然超过8000个字符。

我通常会在 Teradata 数据库上创建视图或存储过程,然后启动它,但我没有权限这样做。

有人知道怎么做吗?我几乎尝试了所有方法。

【问题讨论】:

  • 将逻辑拆分为 2 个Execs,然后在最后合并结果

标签: sql sql-server mdx teradata


【解决方案1】:

试试这个:

DECLARE @strSQL1 varchar(8000);
DECLARE @strSQL2 varchar(8000);

SELECT
@strSQL1 = 
 'select * from openrowset(''MSDASQL'',''DWH''; ''login''; ''pass'', ',
@strSQL2 = 
 '''select * FROM DATABASE.TABLE'')';

DECLARE @SQLbig varchar(MAX);
SET @SQLbig = '';
SET @SQLbig = @SQLbig + @strSQL1;
SET @SQLbig = @SQLbig + @strSQL2;

EXECUTE sp_executesql @SQLbig;

附言sql-server的未来版本中将不推荐使用分号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2015-02-25
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-11-13
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多