Powershell 使用 WHERE 子句插入 MS Access

Posted

技术标签:

【中文标题】Powershell 使用 WHERE 子句插入 MS Access【英文标题】:Powershell insert into MS Access with WHERE clause 【发布时间】:2019-07-08 10:52:34 【问题描述】:

尝试根据在带有 WHERE 子句的 powershell 表单中输入的值将值插入 MS Access DB。我收到一个简单的错误,但很难解决(“SQL 语句末尾缺少分号 (;)”)

这是我的基本代码;

$query = "INSERT INTO SignIns ([DateTimeOUT], [SignedOut]) VALUES ('$($info.F1)','$($info.F2)') FROM $Info WHERE SignIns.Surname = '$($Info.F3)'" 
$cmd = $conn.CreateCommand()
$cmd.CommandText = $query
$result = $cmd.ExecuteNonQuery()
$conn.Close()

我已经修改为在我认为可以解决的所有地方添加分号,但没有运气,仍然返回相同的错误(SQL 语句末尾缺少分号);

    $query = "INSERT INTO SignIns ([DateTimeOUT], [SignedOut]) VALUES ('$($info.F1)','$($info.F2)') FROM $Info WHERE SignIns.Surname = '$($Info.F3);';"; 
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = $query;
    $result = $cmd.ExecuteNonQuery();
    $conn.Close()

(作为参考,我在 WHERE 子句的末尾添加了一个分号,在 $Query 变量的末尾,并在 $cmd.commandtext 变量中执行时尝试附加到 $query 的末尾, 也位于 $result 变量的末尾。

我希望该语句正常执行并使用给定值进行更新。在 Access DB 中进行测试很困难,因为我无法从 DB 中引用我的 PS 表格。非常感谢任何帮助,

谢谢。

【问题讨论】:

【参考方案1】:

更新:修改对 UPDATE 的查询现在让我可以按照简单的逻辑使用 WHERE 语句“插入”值。

$conn.Open()
$query = "UPDATE SignIns SET DateTimeOUT = '$($info.F1)' WHERE SignIns.Surname = '$($Info.F3)'";
$cmd = $conn.CreateCommand()
$cmd.CommandText = $query;
$result = $cmd.ExecuteNonQuery();

$query = "UPDATE SignIns SET SignedOut = '$($info.F2)' WHERE SignIns.Surname = '$($Info.F3)'";
$cmd = $conn.CreateCommand()
$cmd.CommandText = $query;
$result = $cmd.ExecuteNonQuery();
$conn.Close()

这不是我在向表中输入新值时通常使用的方法,但结果相同。我认为没有任何影响。它可能将更新作为“从 NULL 更新到 VALUE”,而不是从源插入到目的地(哪里)

【讨论】:

如果在 PowerShell 中运行 $info.GetType()$info.Count 会得到什么?您当然应该能够为多列插入值。但是,您似乎无法一次插入多行(如您链接到的问题中所述)。 FROM 位 (FROM $Info) 似乎也有点奇怪。 是的,我认为,我认为语法遵循目标/源格式,所以我认为我必须从源中指定我的更新值只是为了语法目的。无论如何我现在已经可以工作了。我将查询更改为 UPDATE 并且很有效,现在将发布答案并关闭。感谢您的输入,将检查 $Info.GetType() / $Info.Count 因为错误让我感到困惑(如果我不使用 WHERE 子句,我可以插入没有问题.. 我添加进去后,错误开始)

以上是关于Powershell 使用 WHERE 子句插入 MS Access的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 where 子句插入

带有插入语句的 Where 子句

Oracle SQL - 带有 Where 子句的插入语句

即使插入了列,“WHERE”子句中的 SQL 未知列

CAML 查询过滤 where 子句

从表 1 中选择某列并使用 Where 子句条件插入到表 2 中的某列