我有这个Openrowset查询,我可以通过路径获取正确的Excel文件。我无法确定引号的确切数量和/或类型转换
我需要传递一个WHERE
语句来获取表中的特定日期。我来自VBA,你放2个引号和2&而且你已经完成了所有的设定。似乎SQL需要数百个! (如果某人有一个关于SQL引用的在线大学的链接,那么也非常感激)
set @sql1 = 'select *
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=' + @filePath1 + '' + ';' + '''' + ',
''Select * from [Sheet1$] '''+')'
exec(@sql1)
我想添加WHERE DATE = @PnLDate
答案 0 :(得分:0)
该规则与您所知的非常相似,但它适用于单引号'
。如果你想在其中一个字符串中使用两个''
逃避它。除了他们之外,你必须有一个用于开放,一个用于结束。
你显示的字符串有点复杂,因为它包含不必要的空字符串,以及只能为一个结果字符串替换的secuentialy contatenated stirngs。在您的字符串的简化版本下面:
set @sql1 = 'select *
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=' + @filePath1 + ';'',
''Select * from [Sheet1$] '')'
根据您的要求where
可能是:
DECLARE @PnLDate datetime -- may be varchar instead, if so, must remove convert(....) and use straight @PnLDate
set @PnLDate = '2014/08/01'
set @sql1 = 'select *
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=' + @filePath1 + ';'',
''Select * from [Sheet1$] where DATE = #'+ -- hash # is MS Access delimiter for dates
convert(varchar(25), @PnLDate, 111)
+'#'')' -- results in #2014/08/01#
当您使用"动态SQL"时,请注意您的数据可以在字符串上注入恶意代码。阅读sql Injection