【问题标题】:How to import data from .csv in SQL Server using PowerShell?如何使用 PowerShell 从 SQL Server 中的 .csv 导入数据?
【发布时间】:2015-06-14 20:37:01
【问题描述】:

我正在使用 PowerShell,并且必须将数据从 .csv 文件导入到 SQL Server 数据库上已创建的表中。所以我不需要csv的标题行,只需写入数据即可。

这是我到目前为止所做的:

#Setup for SQL Server connection
#SQL Server Name
$SQLServer = "APPLIK02\SQLEXPRESS"
#Database Name
$SQLDBName = "code-test"

#Create the SQL Connection Object
$SQLConn = New-Object System.Data.SQLClient.SQLConnection
#Create the SQL Command Object, to work with the Database
$SQLCmd = New-Object System.Data.SQLClient.SQLCommand

#Set the connection string one the SQL Connection Object
$SQLConn.ConnectionString = "Server=$SQLServer;Database=$SQLDBName; Integrated Security=SSPI"
#Open the connection
$SQLConn.Open()

#Handle the query with SQLCommand Object
$SQLCmd.CommandText = $query
#Provide the open connection to the Command Object as a property
$SQLCmd.Connection = $SQLConn

#Execute 
$SQLReturn=$SQLCmd.ExecuteReader()

Import-module sqlps
$tablename = "dbo."+$name

Import-CSV .\$csvFile | ForEach-Object Invoke-Sqlcmd 
  -Database $SQLDBName -ServerInstance $SQLServer 
  #-Query "insert into $tablename VALUES ('$_.Column1','$_.Column2')"
#Close
$SQLReturn.Close()  
$SQLConn.Close()

【问题讨论】:

  • 好吧,您已经注释掉了您的查询语句,这将导致问题。并且您删除了 ForEach-Object 上的括号。您还添加了很多随机代码并从网络上复制/粘贴,这些行中的任何一行都可能导致这些问题。我认为您采用的这种方法使这变得比需要的困难得多。请只尝试我已经给你的方法,并告诉我你遇到了什么错误。
  • 你好 FoxDeploy,我昨天已经完成了,上面的代码只是在试验你的代码是如何工作的。谢谢

标签: sql-server powershell


【解决方案1】:

我写了一篇关于在 PowerShell 中使用 SQL 的博文,所以你可以read more about it here

如果您有可用的 SQL-PS 模块,我们可以轻松做到这一点。只需为您的数据库名称、服务器名称和表提供值,然后运行以下命令:

$database = 'foxdeploy'
$server = '.'
$table = 'dbo.powershell_test'

Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
  -Database $database -ServerInstance $server `
  -Query "insert into $table VALUES ('$($_.Column1)','$($_.Column2)')"
  }

为清楚起见,请将 Column1、Column2 替换为 CSV 中的列名。

请确保您的 CSV 中的值与您的 SQL DB 格式相同,否则您可能会遇到错误。

运行时,您不会看到控制台的任何输出。我建议事后查询以确保您的值被接受。

【讨论】:

  • 嗨,谢谢你的回答,但我这里的 SQL_PS 模块有问题,当我将此命令直接放在控制台中时,模块可以工作,但是从我的 ps 脚本启动它不起作用,一个错误告诉我他们没有找到模块
  • 尝试将Import-module sqlps 添加到您的脚本中。如果您运行的是 PowerShell v3.0 及更高版本,则不需要 import-module,但在早期版本中,您必须先导入。
  • 所以导入现在可以工作,但是还有一些其他错误,不使用这个模块知道解决方案吗?
  • 此模块是从 PowerShell 处理 SQL Server 数据的最佳方式。下一步是使用您现在使用的代码更新您的帖子。
  • 如果不将每个 $_.colname 放在子表达式 ($($_.colname)) 中,这不可能工作。请解决这个问题。另外,请注意,像这样将变量放在 SQL 语句中会使您容易受到SQL injection 的攻击。您可能需要考虑改用prepared statement
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2017-12-14
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多