【问题标题】:Conditional Inserting Into Column有条件地插入列
【发布时间】:2015-02-09 19:04:18
【问题描述】:

我正在编写一个测试某个软件功能的查询。如果没有返回任何内容,则查询显示测试通过。这是查询:

INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)', $(SELECT *
FROM Table1
WHERE Table1.Column1 = ''), GetDate(), $(Var3));

如果没有返回值,我如何让“SELECT * FROM Table1 WHERE Table1.Column1 = '')”输入值 PASS 或如果返回任何值,则输入 FAIL

编辑:为了更加清楚,这个查询是通过一个批处理文件执行的。 Var1、Var2 和 Var3 都是在批处理脚本中声明并拉入此查询的变量。

我在批处理脚本中有一行看起来像这样。

sqlcmd -S SERVER -D DATABASE -v Var1 = "!Variable1!" Var2 = "%Variable2%"
Var3 = "!Variable3!" -i "\\path\to\the\query.sql"

顶部的查询在“query.sql”文件中的位置

第二次编辑:添加在我的批处理脚本中正在执行的 query.sql 文件中有多个查询可能很重要。

我觉得它不会像写一堆用分号分隔的查询那样简单;(我从答案中知道语法不正确,只是为了说明一点)

INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)', $(SELECT *
FROM Table1
WHERE Table1.Column1 = ''), GetDate(), $(Var3));   

INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)',
$(SELECT q1.Column1, q1.Column2, q1.Column3, q2.Column4, q1.Column5-
q2.Column6 AS placeholdername1
FROM (SELECT Table3.Column1, Table3.Column2, count(*) AS placeholdername2
    FROM Table3
    GROUP BY Table3.Column1, Table3.Column2) AS q1 INNER JOIN
  (SELECT Table4.Column1, Table4.Column2,
      count(*) AS placeholdername3
    FROM Table4 INNER JOIN
      Table5 ON Table4.Columnname=
        Table5.id
    GROUP BY
      Table5.Columm1, Table5.Column2) AS
    q2 ON q1.Column1= q2.Column1 AND q1.Column2= q2.Column2
WHERE q1.Column2 - q2.Column2> 1), GetDate(), $(Var3));

请忽略所有占位符值,例如 column1、table3 等,因为它们都是占位符,我没有费心确保它们一致。

这些查询中的每一个都应该将结果转储到具有如下组织列的结果表中:

|  Var1  |  Var2  |  Result  |  DateRun  |  Var3  |
|        |        |          |           |        |

【问题讨论】:

    标签: sql sql-server-2008 batch-file sql-insert


    【解决方案1】:

    首先,如果您想进行选择,则不能使用 values 子句。并且永远不要在不指定要插入的字段的情况下进行插入。

    Insert into ResultsTable (field1, field2, field3, field4, field5)
    Select @var1, @var2, case when count(*) = 0 then'Fail' else 'Pass' end, getdate(), @var3
    from Table1
    WHERE Table1.Column1 = ''
    

    【讨论】:

    • 如果我从批处理文件执行查询,这种格式是否有效? Var1、Var2 是在批处理文件中声明的变量。更具体地说,select 语句从 Table1 中提取值,但其他变量是从其他地方声明的。
    • 如果它们被正确声明为 SQL 服务器变量,它将起作用。我不明白你在批处理文件中运行 SQL 的意思。也许您可以对您正在尝试做的事情进行更多描述。
    • 我正在使用sqlcmd 函数进行批处理脚本以从批处理脚本执行查询。我进行了编辑以尝试澄清。
    • 我尝试添加重要的细节,但每次尝试提交编辑时都会出错,因此希望稍后再试时会成功。
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2013-01-12
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多