如何在作为字符串的sql查询中插入变量

时间:2015-12-07 02:47:55

标签: sql sql-server excel

我可以通过我的条件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)

1 个答案:

答案 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。

阿尔伯特