私はSQLにかなり慣れておらず、SQLスクリプトで大混乱を引き起こすキーワードに問題があります。C#で事前に作成された.sqlスクリプトファイルのリストを実行しようとしています。現在、ファイルを文字列に読み込んで、command.ExecuteNonQuery()で実行しています。これはほとんどのスクリプトでうまく機能しますが、誤ってキーワードが含まれているスクリプトに遭遇しました。
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
基本的に、そのGOにヒットすると、コマンドは失敗します。
私はこれらの挿入ファイルの作成を担当しているので、何らかの方法でそれらを再フォーマットする必要がある場合は、それが可能です。ただし、それらのデータは交渉できません。また、多くの行があるファイルからそれらをロードしているので、このようなことを避けるためのパラメーター化も実行可能ではないようです。
この時点でどんな助けでも大歓迎です。どうもありがとう!
情報を追加するために編集:
明確にするために、実際の文字列は「ASVFDS4 + 23eF3da34sddsdf3d3t4g ... 100charslater ... sd5OAyGOsiISIssdsd/sNUIGsdisd354f」のようなものです。コマンドを実行しようとすると、次のような例外が発生します。
"Unclosed quotation mark after character string 'ASVFDS4+23eF3da34sddsdf3d3t4g...100charslater...sd5OAy'
5OAyの直後にGOsiIS...が続くことに注意してください。これにより、GOは実際にはコマンドとして読み取られているため、そのコマンドの前に文字列が終了することが予想されます。
.NET3.5の実行
編集2 また、明確にする必要があります。現在、実際のGOステートメントを分割し、コマンドを個別に実行しています。
すなわち
USE MyDatabase
GO
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
UNION ALL
...
SELECT '123189', 'abcabc', 'HAD SOME SLEEP'
GO
分割するので、実行します
USE MyDatabase
と
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
UNION ALL
...
SELECT '123189', 'abcabc', 'HAD SOME SLEEP'
別々に。したがって、私の問題は実際のGOステートメントではなく、データ文字列に「GO」という文字が表示されていることです。
答え:問題は、私がひどくばかげた間違いをしたことです。「GO」で分割します。これは、文字GOが表示されるパラメーターの真ん中でコマンド文字列を分割します。
/ facepalm
すべての助けをありがとう!