SQLCMD - SQL Server作业

时间:2014-11-03 20:34:15

标签: 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作业。类型。 如果@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,不知道如何将评论标记为答案。如果你能写回复,我会把它标记为答案。干杯!!!

1 个答案:

答案 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