2015-02-12 36 views
0

我需要通過openrowset從MS SQL Server訪問Teradata數據庫。但我的腳本有8000多個字符(實際上幾乎是其中的兩倍)。下面是腳本示例:在openrowset中克服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) 

但是,這並不工作,因爲還在SQL命令openrowset語句內部長度超過8000個字符。

我通常會在Teradata數據庫上創建視圖或存儲過程,然後啓動它,但我沒有權限執行此操作。

任何人都知道該怎麼做對嗎?我嘗試了幾乎所有東西

+0

將邏輯拆分成2個'Exec's,然後在最後加入結果 – whytheq 2015-02-12 08:55:39

回答

0

試試這個:

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