powershell - 使用 Powershell 在数据表中加载多个 SQL 查询结果集的问题
问题描述
我在 Powershell 脚本中对单独的数据库/连接执行 2 个单独的 SQL 查询。目标是将两个请求的结果导出到单个 CSV 文件中。
我现在正在做的是:
# Create a data table for Clients
$ClientsTable = new-object "System.Data.DataTable"
# Create text commands
$ClientsCommand1 = $connection1.CreateCommand()
$ClientsCommand1.CommandText = $ClientsQuery1
$ClientsCommand2 = $connection2.CreateCommand()
$ClientsCommand2.CommandText = $ClientsQuery2
# Get Clients results
$ClientsResults1 = $ClientsCommand1.ExecuteReader()
$ClientsResults2 = $ClientsCommand2.ExecuteReader()
# Load Clients in data table
$ClientsTable.Load($ClientsResults1)
$ClientsTable.Load($ClientsResults2)
# Export Clients data table to CSV
$ClientsTable | export-csv -Encoding UTF8 -NoTypeInformation -delimiter ";" "C:\test\clients.csv"
在哪里$connection1
和$connection2
被打开System.Data.SqlClient.SqlConnection
。
两个请求都可以正常工作,并且两个输出数据都具有完全相同的列名。如果我将 2 个结果集导出到 2 个单独的 CSV 文件,一切都很好。
但是如上所述在数据表中加载结果失败并显示以下消息:
无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。
相反,如果我切换将数据加载到数据表中的顺序,例如
$ClientsTable.Load($ClientsResults2)
$ClientsTable.Load($ClientsResults1)
(在第一个结果集之前加载第二个结果集),然后错误消失,生成我的 CSV,对来自 2 个请求的数据没有任何问题。我想不出为什么以一种或另一种方式附加数据会触发这个错误,或者工作正常。
任何的想法?
解决方案
我怀疑颠倒订单是否有效。更有可能的是,它正在执行类似于附加到第一次尝试已经创建的 csv 文件的操作。
但是,与原始数据不同的主键定义可能会产生您所看到的结果。从其他排序中提取数据时Datatable.Load()
可能会做意想不到的事情。它将尝试合并数据而不是简单地附加它,根据重载和参数使用不同的匹配策略。如果用于其中一个表的主键没有导致任何匹配且没有记录要合并,但该表的主键匹配所有内容,这可能会解释它。
如果您只想追加结果,您要做的是将第一个结果加载()到数据表中,导出为 CSV,清除表,将第二个结果加载到表中,然后以追加模式再次导出。
推荐阅读
- python - 至少包含一次字符 X 的子字符串的计数。例如输入:str = “abcd”,X = 'b' 输出:6
- php - 如何在配置 phpmyadmin 时修复“未选择数据库”错误?
- php - 如何使用 belongsToMany 选择选项?
- c++ - 使用 Cygwin64 制作 ACE 7.0.0 时出现冲突的声明错误
- c++ - 如何在 C++ 中获取 AppData/LocalLow 路径?
- python-3.x - 使用字典数据结构在有向图中查找具有至少 3 个节点的所有循环
- python - python中的list[1]和list[1:2]有什么区别吗?
- django - Heroku 不加载静态文件,Django
- php - Openssl 验证失败,iOS Secure Enclave 创建了签名
- javascript - 使用签名和策略返回正文的 Google 应用脚本将图像上传到 Amazon S3 格式不正确 multipart/form-data