我试图从powershell运行sql查询作为SQL服务器中的预定作业(然后通过相同的PowerShell脚本通过电子邮件发送)并收到错误我无法排序进行。
###
$SqlServer = “localhost”
$SqlCatalog = “myDatabase”
$SqlQuery = “select * from MY_VIEW″
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = “server=$SqlServer;Database=$SqlCatalog; user id = myUserid; password=myPassword”
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
这是我收到的错误:
作业步骤在PowerShell脚本的第7行收到错误。对应的行是' $ SqlConnection.ConnectionString =" server = $ SqlServer; Database = $ SqlCatalog; user id = myUserid;密码= MYPASSWORD"&#39 ;.更正脚本并重新安排作业。 PowerShell返回的错误信息是:'意外令牌' server = $ SqlServer'在表达或陈述中。 '
我的剧本出了什么问题?
答案 0 :(得分:1)
代码示例包含“智能”引号。也就是说,不是普通的双引号"
(0x22),而是“
(0x201c)和”
(0x201d)(仔细看看双引号是否正确而且是聪明的引用)曲线)。
这不应该是一个问题,虽然“聪明”的引用真的是一个愚蠢的想法,特别是当它们被自动用于格式化包含代码示例的博客文章时。
当复制粘贴到编辑器或直接复制到Powershell时,声明
$SqlQuery = “select * from MY_VIEW″
不会有结束语,但会有一个问号,
$SqlQuery = “select * from MY_VIEW?
这会创建一个不平衡的字符串引号,因此脚本会中断。奇怪的引用char可能是双引号″
(0x301c)。
对于解决方案,请非常仔细地清除“智能”引号并使用普通的"
双引号。确保使用像Notepad ++这样的编辑器,而不是像Wordpad或Word那样的文字处理器。