2014-11-03 100 views
1

假设以下是我的查询。SQLCMD - SQL Server作业

DECLARE @INT INT 
SET @INT = (SELECT COUNT(1) FROM MyTable) 
IF (@INT = 0) 
RAISERROR('Fail',16,1) 

我想使用此查询并使用“操作系统(CmdExec)”类型创建SQL Server作业。 如果@INT <> 0,我想要SQL作业步骤成功,如果@INT = 0,则失败。

如何编写cmd?

我的尝试(它不起作用)...服务器是不同于我将设置工作的地方。

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。消息105,级别15,状态1,服务器RemoteSVR,行1未在字符串'DECLARE @INT INT'后面加上引号。处理退出代码15.该步骤失败。

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

更新:根据斯科特的建议,我改变了格式(删除换行符),它似乎工作。 @Scott,不知道如何将你的评论标记为答案。如果您可以写回复,我会将其标记为答案。干杯!!!

+2

那是究竟如何它按照以下格式你的工作? Sqlcmd可能不喜欢让您的查询跨越多行。如果您删除换行符,它可能会工作。 – 2014-11-03 21:11:08

+0

嗯......哇!认为这是它.. ..谢谢@ScottTeibert这个提示。干杯! – 007 2014-11-03 21:15:14

回答

0

您试图执行多行而不是单个查询。你可以避开,通过使用IF NOT EXISTS

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

注意,-b(在错误批处理中止)选项意味着SQLCMD本身将无法给你一个可捕获的ErrorLevel