我可以通过我的条件OBZ16周围的大量单引号来完美地运行该查询。如果我尝试用变量 @ Sym1 替换该条件,我就没有结果。 (无论有多少单引号和+我放在变量周围!)
SET @Sym1 = 'OBZ16'
SET @filePath1A = 'C:\Users\Richard\XYZ.xlsx'
SET @sql1A = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @filePath1A + '' + ';' + '''' + ',''SELECT Expiration FROM [WatchList$] WHERE OXSymb = ''''OBZ16'''''''+')'
EXEC(@sql1A)
答案 0 :(得分:0)
您的代码会生成此查询:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Users\Richard\XYZ.xlsx;'
,'SELECT Expiration FROM [WatchList$] WHERE OXSymb = ''OBZ16''')
在OBZ16周围,您有一组可以删除的额外引号 为了使您的代码更易于阅读,您应该将每个引号分别添加为两个加号之间的四个单引号。然后你可以看到你必须放置变量的位置。它看起来像这样:
SET @Sym1 = 'OBZ16'
SET @filePath1A = 'C:\Users\Richard\XYZ.xlsx'
SET @sql1A = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database='
+ @filePath1A + ';' + '''' + ',' + '''' + 'SELECT Expiration FROM [WatchList$] WHERE OXSymb = ' + '''' + @sym1 + '''' + '''' + ')'
此代码生成查询:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Users\Richard\XYZ.xlsx;'
,'SELECT Expiration FROM [WatchList$] WHERE OXSymb = 'OBZ16'')
它是相同的查询,但在OBZ16周围只有一组引号,而文本OBZ16现在来自变量@ sym1。
阿尔伯特