Powershell-具有字符参数的调用SQL

问题描述 投票:0回答:1

我有读取Excel文件并在sql数据库中搜索值的代码。这是代码的一部分:

    for ($i=1; $i -le $rowMax-1; $i++)
    { 
        $name = $sheet.Cells.Item($rowName+$i,$colName).text 
        $mail = $sheet.Cells.Item($rowMail+$i,$colMail).text 
        #test   $Query = ‘ SELECT  * FROM dbo.tbl1 where value = ‘ + “‘” +$mail + “‘”
        $Query = ‘ SELECT  * FROM dbo.tbl1 where id = 3’ 

        Invoke-Sqlcmd -serverinstance $DatabaseServerName -Database $Database -Username $Uid -Password $Pwd -query $Query   -ErrorAction Stop

        Write-Host ("My Name is: "+$name)
        Write-Host ("My mail is: "+$mail)
        Write-Host $query
    }
    #close excel file
    $objExcel.quit()

如果我用数字(SELECT * FROM dbo.tbl1 where id = 3)查询,就可以了:

id           : 3
className    : PersonBase
keyValue     : 3
typeCd       : 6
value        : [email protected]
description  :
usermodify   :
datemodify   :
My Name is: G Karen
My mail is: [email protected]
 SELECT  * FROM dbo.tbl1 where id = 3

如果我执行查询:

$Query = ‘ SELECT  * FROM dbo.tbl1 where value = ‘ + “‘” +$mail + “‘”

我收到此错误:

Invoke-Sqlcmd:“''附近的语法不正确。讯息102,第15级,状态1,程序,第1行。在线:8字符:1+调用Sqlcmd -serverinstance $ DatabaseServerName -Database $ Database ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~+ CategoryInfo:InvalidOperation:(:) [Invoke-Sqlcmd],SqlPowerShellSqlExecutionException+ FullyQualifiedErrorId:SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

当我调试时,对我来说输出看起来不错。我可以将其粘贴到服务器上,并且select语句可以正常工作:

My Name is: G Karen
My mail is: [email protected]
 SELECT  * FROM dbo.tbl1 where value = '[email protected]'

出了什么问题?

powershell parameter-passing invoke-sqlcmd
1个回答
0
投票

当您使用id = 3查询时,您正在将循环中每个$i的ID硬编码为3。如果它能正常工作一次(看起来确实如此),它将继续为您的csv文件中的每一行工作。

[将其更改为变量$ email时,它表示您正在使用csv文件中的值(我不能说它是什么),该值可能具有空行或空白行或带有'字符的东西。

我建议您在定义$query的行上放置一个断点,并在每次迭代时查看$email的值,以确保有正确的电子邮件地址(不带多余的字符)并在以后验证执行。

© www.soinside.com 2019 - 2024. All rights reserved.