Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL linked server, open query using variable

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) ')

Above sql works perfect but i dont want to hard code the dates. That's the reason trying to use variable. date format (yyyy-mm-dd, '2013-03-01'), anything other than this date format, Oracle doesn't execute the sql.

Is it possible to do this, If so please re write the whole sql using variable so that i can see how it can be done.

Thanks!

like image 665
user1810575 Avatar asked Jul 01 '13 18:07

user1810575


1 Answers

The below code should do the trick. You can't pass a variable to an OPENQUERY. However, you can dynamically generate the code that you will execute via 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;

On a separate note, I would recommend looking into replacing your linked server query with a SSIS package that loads the data. Although the above code works, this is not the most efficient way to transfer data from an Oracle server to SQL Server.

like image 194
Registered User Avatar answered Sep 19 '22 05:09

Registered User