我遇到了一個很奇怪的問題,可以重複。基本上,我使用invoke-sqlcmd通過使用-inputfile來調用腳本文件,但是如果腳本文件有一些執行錯誤(例如插入列不應該爲空的表),腳本文件將是執行兩次。我也可以從profiler中看到這兩個執行。Invoke-Sqlcmd運行腳本兩次
下面是重現該問題的方式(我的環境:贏8.1 + SQL2014 + PS 5.0)
在數據庫中創建兩個表
Use TestDB create table dbo.s (id int identity primary key, b varchar(50)); create table dbo.t (id int primary key, s_id int, b varchar(50)); alter table dbo.t add constraint fk_t foreign key (s_id) references dbo.s(id)
現在創建一個SQL文件(我們稱之爲c:\ temp \ t.sql)用以下兩行代碼
insert into dbo.s (b) select 'hello world' insert into dbo.t (s_id, b) -- purposely missing id to cause an error select 1, 'good morning'
運行以下PS cmdlet的
invoke-sqlcmd -Server "<my_local_server>" -database TestDB -inputfile "c:\temp\t.sql"
你的PS,如果你打開一個SSMS查詢窗口將返回一個錯誤,現在執行下列操作
select * from TestDB.dbo.s
你會看到兩個記錄存在,而不是一個。 另一方面,如果我運行sqlcmd.exe,則不存在這樣的問題,即只有dbo中有一條記錄。 我錯過了SQLPS中的一些配置嗎?
可重現。也許dba.stackexchange.com人們有更多的見解,所以我會投票支持遷移。 – vonPryz