'&#39付近の構文が正しくありません。

SQL Server Management Studioで次のような簡単なクエリを実行しようとしています。

SELECT TOP 1000 * 
FROM 
    master.sys.procedures as procs
left join 
    master.sys.parameters as params on procs.object_id = params.object_id

これは全く正しいと思われますが、次のようなエラーが発生します。

Msg 102, レベル 15, 状態 1, 行 6 ''付近の構文が正しくありません。

結合を外して単純なselectだけを行うとうまくいきます。

SELECT TOP 1000 *
FROM 
    master.sys.procedures as procs

しかし、動作させるには結合が必要です。このクエリには ''という文字列もないので、何が気に入らないのかがわかりません。

ソリューション

このような予期せぬ問題は、Webページや電子メールからコードをコピーしたときに、テキストに個々のCRやLF、ノンブレイキングスペースなどの印刷不可能な文字が含まれている場合に現れます。

解説 (4)

Panagiotis Kanavosさんのおっしゃるとおり、T-SQLをコピー&ペーストすると、不要な文字が表示されることがあります。

私はついに、文全体を手動で書き直すことなく、どの文字が間違っているかを検出するための簡単で迅速な方法を見つけました(Notepad++だけが必要)。

ファイルをディスクに保存する必要はありません。Notepad++で簡単にできます。

  • New file&quotをクリックします。
  • メニューの"Encoding"を確認します。値は"Encode in UTF-8"になっているはずです。
  • テキストを貼り付けます。 をクリックします。
  • エンコード」メニューから「"Encode in ANSI"」をクリックして、再度テキストを確認してください。 をクリックします。

簡単に間違った文字が見つかるはずです。

解説 (1)

私の場合は、テキストファイルからSQL文を読み込んだのですが、テキストファイルはUTF-8にBOM(byte order mark)を付けた形式で保存されていました。

これを解決するには、メモ帳++でファイルを開き、「エンコード」で「UTF-8」を選択しました。あるいは、16進数のエディタでファイルの最初の3バイトを削除することもできます。

解説 (3)