条件插入列

时间:2015-02-09 19:04:19

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

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

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等,因为它们都是占位符,我并不打算确保它们是一致的。

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

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

1 个答案:

答案 0 :(得分:1)

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

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 = ''