2016-04-20 1 views
0

У меня есть следующий SQL OPENQUERYПочему обыкновение этой работы запроса

SELECT  @TSQL = 'SELECT * FROM OPENQUERY(RMSPROD2,''SELECT COUNT(DISTINCT W.Bond) AS NoBID_Count 
               FROM TIB.WRMAST w 
               WHERE (w.BID In (''No Bid'', ''No Cost'', ''None'') AND w.CtlNumber = ''''' + @WarControlID + ''''''')' 

Когда я запускаю этот запрос, я получаю следующее сообщение об ошибке:

SELECT * FROM OPENQUERY(RMSPROD2,'SELECT COUNT(DISTINCT W.Bond) AS NoBond_Count 
               FROM TIBURON.WRMAST w 
               WHERE (w.Bond In ('No Bond', 'No Bail', 'None') AND w.CtlNumber = ''575403''') 
Msg 102, Level 15, State 1, Line 3 
Incorrect syntax near 'No'. 

Что такое ошибка, что не бросают меня нет показания в окне дизайна любых вопросов

+0

Почему вы строите текстовые строки по вашему запросу? Почему бы просто не запустить его? – n8wrl

+0

Я вижу, что сообщение об ошибке с Print @ TSQL показывает другое предложение WHERE, однако это была ошибка с моей стороны при публикации вопроса. Вырезать и вставить без редактирования. – Perry

+0

Вы должны обновить вопрос с помощью фактического кода и ошибки. –

ответ

2

Основной причиной вашей проблемы является то, что вы случайно закрываете начальную котировку здесь:

SELECT * FROM OPENQUERY(RMSPROD2,'SELECT COUNT(DISTINCT W.Bond) AS NoBond_Count 
               FROM TIBURON.WRMAST w 
               WHERE (w.Bond In (' 

Таким образом, вы получаете сообщение об ошибке около п В Java, например, \ является маскирующим, и таким образом, чтобы обеспечить непрерывность, мы должны написать:

"SELECT COUNT(DISTINCT W.Bond) AS NoBond_Count 
                FROM TIBURON.WRMAST w 
                WHERE (w.Bond In (\'  " //till the end 

поиска для соответствующего экранирующего символа в язык по вашему выбору и применить его.

+0

@FernandoGutierrez, мой ответ был отформатирован в формате java. В java вы можете написать {String SQL = "Выбрать манекен из двойного"}. Если вы наберете макет с двойным в Oracle, вы увидите имя столбца, которое будет возвращено как DUMMY, весь верхний регистр. Если вы хотите обеспечить чувствительность к регистру, вам нужно написать «Dummy» из двойного. Чтобы облегчить это в Java, мы должны написать String SQL = "select \" Dummy \ "from dual"; Это то, что я объяснил. В принципе, правильное использование escape-символов. –

+0

Извините, я не хотел прокомментировать ваш ответ, я попытался прокомментировать вопрос. Я удалю свой комментарий, поскольку он не имеет отношения к вашему ответу. –

1

Я думаю, что вам не хватает пару «» символов, попробуйте следующее:

SELECT  @TSQL = 'SELECT * FROM OPENQUERY(RMSPROD2,''SELECT COUNT(DISTINCT W.Bond) AS NoBID_Count 
              FROM TIB.WRMAST w 
              WHERE (w.BID In (''''No Bid'''', ''''No Cost'''', ''''None'''') AND w.CtlNumber = ''''' + @WarControlID + ''''''')' 
+0

Я думаю, у вас есть способ * слишком много символов! Вам нужно всего 2 апострофа, когда вы их избегаете, но по какой-то причине у вас есть 4. – Zack

0

Я не смог найти ответ на этот вопрос я пошел с другим подходом. Я использовал OpenQuery с этим кодом

SELECT @TSQL = 'SELECT * FROM OPENQUERY(RMSPROD2,''SELECT TIB.WRMAST.WR_INVL, TIB.WRMAST.WR_WARR_CTL,TIBURON.WRMAST.WR_BAIL,TIB.WRWCHG.WC_BAIL 
         FROM TIB.WRMAST 
         LEFT JOIN TIBURON.WRWCHG 
         ON WRWCHG.WC_WR_CHAIN = WRMAST.WRMAST_ROW 
         WHERE TIBURON.WRMAST.WR_WARR_CTL = ''''' + @WarControlID + ''''''')' 
Insert Into @WarrantBail 
    EXEC (@TSQL) 

И разместил результаты в таблице темпов. Затем я смог использовать обычный T-SQL для записи остальной части необходимого синтаксиса.