2017-02-23 61 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。