捕获异常调用" ExecuteNonQuery"

时间:2014-08-14 19:41:49

标签: sql-server powershell exception-handling

我有一个Powershell脚本,它将主键值和另一个值插入SQL Server 2012数据库。

这是包含INSERT的{​​{1}} SQL字符串,其中IF NOT EXISTS$sql_output

int

这是尝试插入数据库的代码

$SQL_UPDATE = "BEGIN
    IF NOT EXISTS (SELECT CONVERT(VARCHAR(12), GETDATE(), 107) as Date_to_Display
                    FROM dbo.Download
                    WHERE dbo.Download.Date_of_Download = GETDATE())
    BEGIN
        INSERT INTO dbo.Download
        VALUES (convert(date, GETDATE(), 100),$sql_output)
    END
END"

如果我手动运行脚本,我会抛出异常,即

  

异常调用" ExecuteNonQuery"用" 0"参数:"违反PRIMARY KEY约束' PK_Download'。无法在对象中插入重复的密钥' dbo.Download'。
  重复键值为(2014-08-14)   声明已经终止。

但脚本继续运行。

但是,如果Windows Server 2012上的任务计划程序尝试运行此程序,则会无限期挂起。

如何处理此异常?

1 个答案:

答案 0 :(得分:1)

$SQL_UPDATE = "BEGIN
                  IF NOT EXISTS (SELECT 1
                                 FROM dbo.Download
                                 WHERE Date_of_Download = CAST(GETDATE() AS DATE))
                  BEGIN
                      INSERT INTO dbo.Download (Date_of_Download , OtherColumnName)
                      VALUES (CAST(GETDATE() AS DATE) ,$sql_output)
                  END
              END"