所以我在SQL Server中有一个非常简单的表(3列),我正在使用' Invoke-Sqlcmd'查询表中的信息并放入各种表单字段。这工作正常,所以使用语法即时使用连接到数据库的基本前提似乎有点。
然而,当我将cmdlet的查询部分更改为“更新”时,我发现了这一点。值无论什么......数据库没有更新。但是,如果我在Powershell ISE中运行相同的代码,它会更新。
类似地,当我尝试使用连接从一组表中提取数据时,查询在PS ISE中工作正常,但在PS Studio的代码中,它不会像我以前成功的Invoke-Sqlcmd那样用结果填充变量。
适用于PS Studio的代码:
$QueryResult = Invoke-Sqlcmd -ServerInstance 'server\instance' -Database 'Hardware' -Query "SELECT * FROM allocation where empno = $emp"
在PS Studio中无效但在ISE中有效的代码:
Invoke-Sqlcmd -ServerInstance 'Server\instance' -Database 'Hardware' -Query "Update dbo.allocation set MaxAllowed = $updateinputint where empno = $emp"
在ISE中有效但不在带有连接的PS Studio中的代码:
$sqlcmd2 = "select dbo.CurrentLocation.Location, dbo.HwTable.HWCode, dbo.HwTable.HWDesc, COUNT(*) AS [COUNT]
from dbo.CurrentLocation
JOIN
dbo.MainTable on dbo.CurrentLocation.number = dbo.MainTable.Number
JOIN
dbo.HwTable on dbo.MainTable.HWCode = dbo.HwTable.HWCode
Where dbo.CurrentLocation.Location = HO
Group by
dbo.CurrentLocation.Location, dbo.HwTable.HWCode, dbo.HwTable.HWDesc"
$queryresult2 = Invoke-Sqlcmd -ServerInstance 'server\instance' -Database 'Hardware' -Query $sqlcmd2
起初,最后一个查询在ISE中没有工作,直到我删除别名,然后它工作正常。 PS Studio有一些限制吗?或者我错过了一招?没有错误消息,调试通过行很好但变量显示什么都没有,或者插入,数据库没有更新。
提前感谢任何建议。
答案 0 :(得分:0)
这是由于白色空间'即使我编辑查询坐在一行上,以便省略任何回车或标签空间,它仍然无法工作。显然,powershell工作室不喜欢冗长的字符串。使用@ querytext @封装查询字符串使其工作。运行时调试变量内容在使用和不使用@符号时看起来相同,但使其工作。