我对 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 实际上是作为命令读取的,导致它期望在该命令之前结束字符串。
运行 .NET 3.5
编辑 2 我还应该澄清一下,我目前正在拆分实际的 GO 语句并单独执行命令。
IE
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 的位置。
/掌脸
感谢所有的帮助!