SQLCMD-SQLServer作业

SQLCMD-SQLServer作业,sql,sql-server,tsql,sql-server-2012,sqlcmd,Sql,Sql Server,Tsql,Sql Server 2012,Sqlcmd,假设下面是我的问题 DECLARE @INT INT SET @INT = (SELECT COUNT(1) FROM MyTable) IF (@INT = 0) RAISERROR('Fail',16,1) 我想使用此查询并使用操作系统CmdExec类型创建SQL Server作业。 我希望SQL作业步骤在@INT 0时成功,在@INT=0时失败 我怎样写命令 我的尝试失败了…服务器与我设置作业的位置不同 sqlcmd -S 123.45.67.890 -E -V15 -d MyDB -Q

假设下面是我的问题

DECLARE @INT INT
SET @INT = (SELECT COUNT(1) FROM MyTable)
IF (@INT = 0)
RAISERROR('Fail',16,1)
我想使用此查询并使用操作系统CmdExec类型创建SQL Server作业。 我希望SQL作业步骤在@INT 0时成功,在@INT=0时失败

我怎样写命令

我的尝试失败了…服务器与我设置作业的位置不同

sqlcmd -S 123.45.67.890 -E -V15 -d MyDB -Q "DECLARE @INT INT
SET @INT = (SELECT COUNT(1) FROM MyTable)
IF (@INT = 0)
RAISERROR('Fail',16,1)" -b
作业失败消息

以用户身份执行:LocalSVR\user。Msg 105,级别15,状态1,服务器RemoteSVR,字符串“DECLARE@INT”后的第1行未关闭引号。处理退出代码15。步骤失败了

请注意,当MyTable有1+条记录时,步骤失败的原因与此相同


更新:根据Scott的建议,我改变了格式,删除了换行符,看起来效果不错@斯科特,不知道如何将你的评论标记为答案。如果你能写一个回复,我会把它标记为答案。干杯

您试图执行多行而不是单个查询。如果不存在,您可以使用

SQLCMD -b -S"MyServer" -d"MyDatabase" -Q"IF NOT EXISTS(SELECT * FROM MyTable) RAISERROR('Fail',16,1)"

请注意,-b On error batch abort选项意味着SQLCMD本身将无法为您提供可捕获的ErrorLevel

,这正是您的作业中的格式吗?Sqlcmd可能不喜欢让查询跨越多行。如果你去掉断线,它可能会工作。嗯…哇!!我想就是这样了..哈哈,谢谢@Scotteibert给我的提示。干杯