2013-07-01 34 views
5
SELECT * INTO #C_INFO FROM OPENQUERY(ORACLE_CMIDW1,' SELECT A.CID, A.ANO, 
A.COMP_REVD_DATE, A.REVIEW_COMP_DATE, A.ISSUE, B.ENT_ID, A.TYPE_ID FROM XXX 
B INNER JOIN YYY A ON B.ANO = A.ANO WHERE A.REVIEW_COMP_DATE Between 
''2012-03-01'' And ''2013-10-31'' AND Not A.ISSUE = 110 AND A.TYPE_ID = 1 
and B.ENT_ID In (2,3) ') 

Trên sql hoạt động hoàn hảo nhưng tôi không muốn mã hóa ngày tháng. Đó là lý do cố gắng sử dụng biến. định dạng ngày (yyyy-mm-dd, '2013-03-01'), bất kỳ điều gì khác với định dạng ngày tháng này, Oracle không thực thi sql.Máy chủ được liên kết với SQL, truy vấn mở sử dụng biến số

Có thể thực hiện việc này không, nếu có, vui lòng viết lại toàn bộ sql sử dụng biến để tôi có thể xem cách thực hiện.

Cảm ơn!

+0

Bạn có nhận được một lỗi bạn có thể chỉ cho chúng ta? –

+0

Tôi không có lỗi, tôi muốn thay thế những ngày được mã hóa cứng bằng cách sử dụng các biến. Nếu tôi có thể làm điều đó, hãy bắn tôi truy vấn để tôi có thể xem nó có thể được thực hiện như thế nào. – user1810575

+0

Rất liên quan chặt chẽ; có thể trùng lặp: http://stackoverflow.com/questions/3378496 – NateJ

Trả lời

8

Mã bên dưới nên thực hiện thủ thuật. Bạn không thể chuyển một biến cho OPENQUERY. Tuy nhiên, bạn có thể tự động tạo mã mà bạn sẽ thực thi qua OPENQUERY.

DECLARE @StartDate DATETIME = '2012-03-01'; 
DECLARE @EndDate DATETIME = '2013-10-31'; 

DECLARE @SqlCommand NVARCHAR(MAX) = N'SELECT * 
INTO #C_INFO 
FROM OPENQUERY(ORACLE_CMIDW1, 
    ''SELECT A.CID, A.ANO, A.COMP_REVD_DATE, A.REVIEW_COMP_DATE, A.ISSUE, B.ENT_ID, A.TYPE_ID 
    FROM XXX B 
    INNER JOIN YYY A 
     ON B.ANO = A.ANO 
    WHERE A.REVIEW_COMP_DATE BETWEEN ''''' + CONVERT(CHAR(10), @StartDate, 120) + ''''' AND ''''' + CONVERT(CHAR(10), @EndDate, 120) + ''''' 
    AND Not A.ISSUE = 110 AND A.TYPE_ID = 1 and B.ENT_ID In (2,3)'');'; 

PRINT @SqlCommand 

EXEC sp_ExecuteSQL @SqlCommand; 

Lưu ý riêng, tôi khuyên bạn nên xem xét thay thế truy vấn máy chủ được liên kết bằng gói SSIS tải dữ liệu. Mặc dù mã trên hoạt động, đây không phải là cách hiệu quả nhất để chuyển dữ liệu từ máy chủ Oracle sang SQL Server.

+0

Được hỗ trợ bởi một bài viết KB từ chính MS: https://support.microsoft.com/en-us/kb/314520 – NateJ

0

này nên làm điều đó:

DECLARE @startDate DATETIME = '2013-06-01' 
DECLARE @endDate DATETIME = '2013-07-01' 

INSERT INTO #C_INFO 
EXECUTE('SELECT A.CID, A.ANO, 
A.COMP_REVD_DATE, A.REVIEW_COMP_DATE, A.ISSUE, B.ENT_ID, A.TYPE_ID FROM XXX 
B INNER JOIN YYY A ON B.ANO = A.ANO WHERE A.REVIEW_COMP_DATE Between ? And ? 
AND Not A.ISSUE = 110 AND A.TYPE_ID = 1 AND B.ENT_ID In (2,3) ', @startDate , @endDate) AT ORACLE_CMIDW1 
Các vấn đề liên quan