【发布时间】:2018-01-30 12:03:08
【问题描述】:
我有一个脚本,它每天遍历一个目录中的几千个文件,并且想用每个文件的详细信息更新 SQL Server 表,因为它们是在 foreach 循环中处理的。
我已经在 foreach 循环中使用了以下内容:
Invoke-Sqlcmd -Query "INSERT INTO $dbTable (name, date, worknum, identifier) VALUES ('$name','$date','$worknum','$identifier')"
-ServerInstance $dbHost -Database $dbName -ErrorAction Stop
虽然这很好用,但我想知道将这种方法更改为在文件处理开始之前建立 SQL Server 连接并在脚本结束时关闭它是否有任何好处?像这样的..
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$dbHost;Database=$dbName;Integrated Security=True;"
<foreach loop>
$SqlConnection.Close()
我不关心脚本运行的速度,因为它已经相当快了,只是不影响数据库性能。
【问题讨论】:
-
如果脚本运行得很快,这可能不是问题,但大致了解您希望插入的行数会有所帮助。如果数字很大,处理一个大事务可以减少日志大小。
-
我很确定不会有明显差异,因为 SQL-Server/ADO.NET 使用 connection pooling。但要知道它,你必须测试它。 ;-)
-
感谢 cmets 小伙子。它为每个处理的文件插入一行,因此每天大约 2k。我想我会保持原样。干杯,罗伯。
标签: sql sql-server powershell foreach invoke-sqlcmd