首页 > 解决方案 > 带有字符参数的 Powershell -invokesql

问题描述

我有读取 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()

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

id           : 3
className    : PersonBase
keyValue     : 3
typeCd       : 6
value        : karen.g@hotmail.com
description  :
usermodify   :
datemodify   :
My Name is: G Karen
My mail is: karen.g@hotmail.com
 SELECT  * FROM dbo.tbl1 where id = 3

如果我使用查询执行:

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

我收到此错误:

Invoke-Sqlcmd : ''' 附近的语法不正确。消息 102,级别 15,状态 1,过程,第 1 行。在第 8 行 char:1 + Invoke-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: karen.g@hotmail.com
 SELECT  * FROM dbo.tbl1 where value = 'karen.g@hotmail.com'

出了什么问题?

标签: powershellparameter-passingquotinginvoke-sqlcmd

解决方案



推荐阅读