SQLCMD - SQL Server作业
问题描述:
假设以下是我的查询。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,不知道如何将你的评论标记为答案。如果您可以写回复,我会将其标记为答案。干杯!!!
答
您试图执行多行而不是单个查询。你可以避开,通过使用IF NOT EXISTS
SQLCMD -b -S"MyServer" -d"MyDatabase" -Q"IF NOT EXISTS(SELECT * FROM MyTable) RAISERROR('Fail',16,1)"
注意,-b(在错误批处理中止)选项意味着SQLCMD本身将无法给你一个可捕获的ErrorLevel
那是究竟如何它按照以下格式你的工作? Sqlcmd可能不喜欢让您的查询跨越多行。如果您删除换行符,它可能会工作。 – 2014-11-03 21:11:08
嗯......哇!认为这是它.. ..谢谢@ScottTeibert这个提示。干杯! – 007 2014-11-03 21:15:14