我有一个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上的任务计划程序尝试运行此程序,则会无限期挂起。
如何处理此异常?
答案 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"