Powershell Studio 2016和SQL更新|带有连接

时间:2016-12-21 19:00:12

标签: sql sql-server powershell

所以我在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有一些限制吗?或者我错过了一招?没有错误消息,调试通过行很好但变量显示什么都没有,或者插入,数据库没有更新。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

这是由于白色空间'即使我编辑查询坐在一行上,以便省略任何回车或标签空间,它仍然无法工作。显然,powershell工作室不喜欢冗长的字符串。使用@ querytext @封装查询字符串使其工作。运行时调试变量内容在使用和不使用@符号时看起来相同,但使其工作。