2011-01-19 68 views
0

我有一個OpenQuery(用於在SQL2005中對傳統數據庫運行查詢)。我正在構建要運行的字符串,以便返回最近6個月的數據。SQL SP_EXECSQL @VAR運行「動態」OpenQuery

我遇到的問題是'||'連接。

這個工程的遺留系統上:

SELECT 
    EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime 
FROM 
    EVENT 

這通過鏈接SQL服務器工作在SQL2005:

Declare @Query nvarchar(MAX) 
Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       * 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

exec sp_executesql @Query 

這不起作用:

Declare @Query nvarchar(MAX) 
Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       EVENT_DATE || '' '' || EVENT_TIME 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

exec sp_executesql @Query 

也沒有這樣的:

   EVENT_DATE '|'| '' '' '|'| EVENT_TIME 

我知道我錯過了一些簡單的...但是||將字符串連接在一起會讓事情變得糟糕,儘管它本身可以在遺留系統上工作。

回答

3

你是對的,它不起作用導致它不發送一個完整的字符串到OPENQUERY,你可以嘗試兩件事情。首先,串聯權',它應該是這樣的:

Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       EVENT_DATE || '''' '''' || EVENT_TIME 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

或者你可以嘗試在SQL串聯這些列,就像這樣:

Set @Query = N' 
    SELECT 
     *, EVENT_DATE + '' '' + EVENT_TIME 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       * 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 
+0

'' '' '' '' 的工作。甚至沒有想到字符串中的字符串。我知道這簡直是愚蠢的。 – WernerCD 2011-01-19 16:55:45