假设以下是我的查询。
DECLARE @INT INT
SET @INT = (SELECT COUNT(1) FROM MyTable)
IF (@INT = 0)
RAISERROR('Fail',16,1)
我想使用此查询并使用"操作系统(CmdExec)"创建SQL Server作业。类型。 如果@INT<>我希望SQL作业步骤成功如果@INT = 0,则为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的建议,我更改了格式(删除了换行符),它似乎有效。 @Scott,不知道如何将评论标记为答案。如果你能写回复,我会把它标记为答案。干杯!!!
答案 0 :(得分:0)
您尝试执行多行而不是单个查询。您可以使用IF NOT EXISTS
来解决这个问题 \G # G anchor
( # (1 start)
(?> # Atomic group start
< # Begin a Tag <, but not an html comment
(?:
script # Script
(?:
\s+
(?:
" [\S\s]*? "
| ' [\S\s]*? '
| (?:
(?! /> )
[^>]
)*?
)+
)?
\s* >
[\S\s]*? </script \s*
| # or,
(?: # Non-attribute
/?
[\w:]+
\s*
/?
)
| # or,
(?: # Attribute
[\w:]+
\s+
(?:
(?:
(?: " [\S\s]*? " )
| (?: ' [\S\s]*? ' )
)
| (?: [^>]*? )
)+
\s*
/?
)
| # or,
\? # <? ?> form
[\S\s]*?
\?
| # or,
(?: # Misc <! > forms
!
(?:
(?:
DOCTYPE
[\S\s]*?
)
| (?:
\[CDATA\[
[\S\s]*?
\]\]
)
| (?:
ATTLIST
[\S\s]*?
)
| (?:
ENTITY
[\S\s]*?
)
| (?:
ELEMENT
[\S\s]*?
)
)
)
| # or,
%-- [\S\s]*? --% # JSP comment
)
> # End a Tag >
| # or,
# A character that does
# not begin a html comment
(?! <!-- [\S\s]*? --> )
[\S\s]
)* # Atomic group end, 0 to many times
) # (1 end)
<!--
( [\S\s]*? ) # (2), Finally, the Html comment
-->
请注意,-b(On error batch abort)选项意味着SQLCMD本身将失败,为您提供Trappable ErrorLevel