ルールは、あなたが知っていると非常によく似ていますが、それを追加したいです一重引用符'
に適用されます。それらのうちの1つを文字列の中に入れたい場合はを2つ使用して''
をエスケープします。それらを除いて、あなたはオープン用のものとクローズ用のものがなければなりません。
あなたが表示する文字列は、空の空文字列が含まれているためちょっと複雑になっています。あなたの文字列のsimiplificatedバージョンの下:あなたの要求where
で
set @sql1 = 'select *
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0;Database=' + @filePath1 + ';'',
''Select * from [Sheet1$] '')'
ことがあります
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」を使用するときに、あなたのデータは、文字列に悪質なコードを挿入できることを注意してください。 セットする@ SQL1は= 'OPENROWSET FROM SELECT *('(PnLDate @、NVARCHAR(MAX))に変換 ` セット@PnLDate = 'Microsoft.ACE.OLEDB.12.0:このメソッドを使用する方法についてsql Injection
を読みます''、 '' エクセル12.0;データベース= '+ @ filePath1 + ';''、 '' を選択* DDate = '+ @PnLDate +' [Sheet1の$]から ''「) ' 私は データ型nvarchar(max)と日付が、add演算子で互換性がありません。 – Rich
@PnLDateを文字列に変換する必要があるというエラーが発生します。 (SQLサーバーが自動的に連結してその型を調べるのはほんのわずかなことですが、datetimeはそうではありません)。結果として得られる文字列は、有効なSQL文でなければなりません。あなたのケースでは、 'DDate = 12/31/2015'のように日付定数の周りに必要な引用符がないと読んでしまうかもしれません。私の編集した例の変換とsorroundへの追加引用符を参照してください –
大変ありがとうございますが、私はこれで運がありません 'DECLARE @PnLDate varchar(25)'の型を変更しました。 _ 'set @PnLDate = 08/01/2014' 次に、私はあなたのクエリを使用しました。 _ [Select * from [Sheet1 $] where DATE =" 08-01-2014 " 「OLE DBプロバイダに対して は、私はまた、二重引用符を削除しようとしたと私は日付の数値を使用している場合、それはまだ – Rich