根据查询返回的结果将字符串插入SQL表

时间:2016-06-06 15:15:32

标签: sql sql-server if-statement insert-into

我有一些查询,我用来测试我运行的测试的数据库结果是否没有明显破坏和错误。

其中一个查询具有以下基本形式:

SELECT *
FROM Table
WHERE Column = ''

检查以确保一个特定字段不为空。我想跟踪正在运行的这些测试以及它们通过或失败的时间。有没有办法可以编写查询,这样如果该查询带回任何结果,那么它会将字符串写入另一个表格,如“Test Passed”?

因此,伪版本可能看起来像这样:

IF (
    SELECT *
    FROM Table1
    WHERE Table1.Column1 = ''
) = 0
INSERT INTO Table2 (FileName, Date, Result)
VALUES ('File1', 'GetDate()', 'Test Passed')
ELSE
INSERT INTO Table2 (FileName, Date, Result)
VALUES ('File1', 'GetDate()', 'Test Failed')

表格可能如下所示:

| FileName |   Date   |    Result   |
|:--------:|:--------:|:-----------:|
| File1    | 12-25-16 | Test Passed |
| File2    | 12-25-16 | Test Failed |
| File3    | 12-25-16 | Test Passed |
| File4    | 12-25-16 | Test Passed |

4 个答案:

答案 0 :(得分:4)

你的代码中几乎有它。只需将SELECT *更改为SELECT COUNT(*),您就可以了。我会设置状态,然后插入。

DECLARE @testStatus NVARCHAR(MAX);

IF (
    SELECT COUNT(*)
    FROM Table1
    WHERE Table1.Column1 = ''
) = 0
    SET @testStatus = 'Test Passed'
ELSE
    SET @testStatus = 'Test Failed'

INSERT INTO Table2 (FileName, Date, Result)
VALUES ('File1', GetDate(), @testStatus)

答案 1 :(得分:0)

  

有没有办法可以编写一个查询,这样如果该查询带回任何结果,那么它会将一个字符串写入另一个表格,例如" Test Passed"?

进一步构建您的查询,您可以执行以下操作

- 没有列,所以测试通过了

    IF not exists ( SELECT *
        FROM Table1
        WHERE Table1.Column1 = ''
    ) 
Begin
    INSERT INTO Table2 (FileName, Date, Result)
    VALUES ('File1', 'GetDate()', 'Test Passed')
End

答案 2 :(得分:0)

如果只想使用查询(没有T-SQL)来实现结果,可以使用此解决方案:

INSERT INTO Table2(FileName, Date, Result)
  SELECT 'File1', GetDate(), X.Result FROM (
    SELECT 'Test passed' Result
       WHERE EXISTS(SELECT * FROM Table1 WHERE Column1 = '')
    UNION ALL      
    SELECT 'Test failed'
       WHERE NOT EXISTS (SELECT * FROM Table1 WHERE Column1 = '')
  ) X

只需稍加努力,您就可以编写相同查询的Oracle版本:

INSERT INTO Table2(FileName, Date, Result)
  SELECT 'File1', sysdate, X.Result FROM (
    SELECT 'Test passed' Result FROM dual
       WHERE EXISTS(SELECT * FROM Table1 WHERE Column1 = '')
    UNION ALL      
    SELECT 'Test failed' FROM dual
       WHERE NOT EXISTS (SELECT * FROM Table1 WHERE Column1 = '')
  ) X

答案 3 :(得分:0)

MERGE 
   table2 AS target
USING 
   table1 AS source
ON 
   source.Column1 = ''
WHEN MATCHED THEN 
   INSERT INTO target (FileName, Date, Result)
   VALUES ('File1', 'GetDate()', 'Test Failed')
WHEN NOT MATCHED THEN 
   INSERT INTO target (FileName, Date, Result)
   VALUES ('File1', 'GetDate()', 'Test Passed')