2017-02-23 62 views
0

當我Exec的這個OpenQuery SQL - 我的單引號出了什麼問題?

SET @Qry = 

    'SELECT [LMITNO] INTO ##TABLETEMP' + LTRIM(RTRIM(STR(@@SPID))) + '  
    FROM OPENQUERY(MAA,''SELECT DISTINCT [LMITNO] FROM MAA.ESMEL3.MVXDDTPRD.MILOMA 
    WHERE [LMITNO] LIKE ' + '''' + @ChemicalPreFix + '''' + ''')' 

我得到這個。

SELECT [LMITNO] INTO ##TABLETEMP91 FROM 
    OPENQUERY(MAA,'SELECT DISTINCT [LMITNO] 
    FROM MAA.ESMEL3.MVXDDTPRD.MILOMA WHERE [LMITNO] LIKE ''CHE%''') 

但我得到的錯誤是CH​​E%附近有錯誤的語法。然而,語法對我來說看起來沒問題。怎麼了?

回答

1

您所查詢的期待權,除了在列入服務器名稱由聲明,它應閱讀:

SET @Qry = 

    'SELECT [LMITNO] INTO ##TABLETEMP' + LTRIM(RTRIM(STR(@@SPID))) + '  
    FROM OPENQUERY(MAA,''SELECT DISTINCT [LMITNO] FROM ESMEL3.MVXDDTPRD.MILOMA 
    WHERE [LMITNO] LIKE ' + '''' + @ChemicalPreFix + '''' + ''')' 
1

請試試這個:

SET @Qry = 

'SELECT [LMITNO] INTO ##TABLETEMP' + LTRIM(RTRIM(STR(@@SPID))) + '  
FROM OPENQUERY(MAA,''SELECT DISTINCT [LMITNO] FROM MAA.ESMEL3.MVXDDTPRD.MILOMA 
WHERE [LMITNO] LIKE ' + '''''' + @ChemicalPreFix + '''''' + ''')' 

它給下面的查詢:

SELECT [LMITNO] INTO ##TABLETEMP53 FROM 
OPENQUERY(MAA,'SELECT DISTINCT [LMITNO] FROM MAA.ESMEL3.MVXDDTPRD.MILOMA 
WHERE [LMITNO] LIKE ''CHE%''') 

它成功解析。 SELECT查詢中的變量需要額外的引號,因爲它是動態SQL。