【问题标题】:Error with SqlCommand and multi-line commentsSqlCommand 和多行注释出错
【发布时间】:2014-01-20 16:43:41
【问题描述】:

我在使用 dotnet SqlCommand 时遇到了一个奇怪的错误。

基本上,我正在执行一个包含多行注释的命令文本,其中包含GO,例如:

/*IF OBJECT_ID ( 'dbo.xxx', 'P' ) IS NOT NULL 
DROP PROCEDURE [dbo].[xxx]
GO 
*/

select * from dbo.abc

我得到的错误是“Missing end comment mark '*/'”

我能够缩小错误范围,并且该问题似乎与GO 有关。如果我删除 GO 就可以了。

如果我执行此命令并在 sql 配置文件中观察执行的查询,我会得到:

/*IF OBJECT_ID ( 'dbo.xxx', 'P' ) IS NOT NULL 
DROP PROCEDURE [dbo].[xxx]

所以部分查询没有执行......并且缺少结束注释标记

我已经搜索过是否有人遇到过这个问题,因为我在 msdn 上看到了类似GO 问题的帖子...

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/7e5ef20d-4b19-4930-9b1f-64304e6987e2/missing-end-comment-mark?forum=sqlreplication

我是唯一有这个问题的人吗?有解决办法吗?

【问题讨论】:

  • 将 cmets 传递给您通过 SQLCommand 运行的查询有什么意义?我了解您何时将存储过程保存到服务器,但我不明白这里的重点。
  • 我们有一个工具,它能够将 sql 脚本部署到数据库。基本上不是使用工具 A 部署到 SQL Server,使用工具 B 部署到 Oracle,工具 C 部署到 mysql 等等......我们拥有的是一种工具,它能够执行诸如 db 版本控制之类的操作,部署到“任何" 数据库引擎等...为了将 sql 代码部署到数据库,我们创建一个 DbCommand 并执行脚本。有时脚本包含带有 GO 字符串的 cmets。
  • 好吧,不要在评论中走出去,不知道您还期待什么其他解决方案。

标签: .net sql-server sqlcommand


【解决方案1】:

我看不懂,但问题是GOGO 不是 Transact-SQL,它是 SSMS 等工具的批处理分隔符。试试不带GO(或者不带多行注释或任何注释)。

【讨论】:

  • 我知道问题出在 GO 上。我不知道为什么它会在评论中被解释。
  • 因为它在评论之前被首先解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2010-10-13
  • 2015-10-22
相关资源
最近更新 更多