gpt4 book ai didi

Powershell:如何用引号将字符串数组括起来,以便 SQL "IN"运算符起作用?

转载 作者:行者123 更新时间:2023-12-02 23:41:14 25 4
gpt4 key购买 nike

我主要是要求用户输入一些用逗号分隔的 formId,然后将该字符串传递给执行 SQL 查询更新的函数。问题是我无法使用 IN 运算符,因为查询必须采用以下格式:“(''),('')”。

我想让这个查询工作:

UPDATE [dbo].[Details] SET Field1 = 0 WHERE FormId in ('123','456','789')

为此我想接受这个用户输入:

123,456,789

我怎样才能让它工作?

Function Execute-Query([String[]] $FormIds)
{
$arr = $FormIds -split ','

ForEach ($formId in $arr)
{
echo $formId
}
$dataSource = "x"
$user = "x"
$pwd = ""x
$database = "x"
$connectionString = "Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;"

$sqlcmd = new-object "System.data.sqlclient.sqlcommand"
$sqlcmd.connection = $con
$sqlcmd.CommandTimeout = 600000
$sqlcmd.CommandText = “UPDATE [dbo].[Details] SET Field1 = 0 WHERE FormId in (????)”
$rowsAffected = $sqlcmd.ExecuteNonQuery()

$connection.Close()

}
$strFormIds = Read-Host "Enter FormIds:"
Execute-Query $strFormIds

最佳答案

不确定 IN 如何发挥作用,但假设您只想像示例中那样构造查询字符串,请在代码中使用以下子表达式而不是 ????:

$("'" + ($FormIds -join "','") + "'")

也就是说,您的 Read-Host 调用不会自动将您的 '123','456','789' 用户输入转换为单个字符串数组 - 相反,它会创建一个单个元素数组,其唯一元素就是那个字符串作为一个整体

因此,您必须首先明确地将您的单字符串用户输入解析为一个数组,如下所示:

[string[]] $formIds = $strFormIds -split '[, ]' -ne ''

注意要分割的字符集 - ,<space> - 这样 123,456123, 456 甚至 123 456 都可以工作。例如,-ne '' 部分会过滤掉由多个相邻空格产生的空元素。

关于Powershell:如何用引号将字符串数组括起来,以便 SQL "IN"运算符起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com