【问题标题】:Invoke-Sqlcmd : Invalid object name 'Inventar'Invoke-Sqlcmd:无效的对象名称“Inventar”
【发布时间】:2019-08-19 01:36:21
【问题描述】:

所以,我正在尝试使用 Invoke-Sqlcmd-CMDLet 通过 Powershell 运行 SQL 查询。非常直截了当:

Invoke-Sqlcmd -Query $Query -ServerInstance $DBServer -Database $DBName -Username $DBUser -Password $DBPass

($Query 是 "Select * FROM Inventar;")

现在我得到一个错误:

Invoke-Sqlcmd:无效的对象名称“Inventar”。 在行:1 字符:1 + 调用-Sqlcmd -Query $Query -ServerInstance $DBServer -Database $DBName -Usernam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

无论如何,我能够使用以下查询运行命令:

SELECT * FROM INFORMATION_SCHEMA.TABLES;

它列出了数据库中的所有表。

从那里我得到了表格“Inventar”,这个问题的错误类型:

Azure SQL: Invalid Object Name using Powershell's "Invoke-sqlcmd" on Adventureworks

除了我已经有了 -Database 属性。

也许有人可以帮助我?

【问题讨论】:

  • 您可能需要限定表所在的架构:schema.Inventar
  • 我认为架构包含域\用户名,因为它在 TABLE_SCHEMA 下显示如下,但是当我在表前面设置它时 (****** \ ***** *.Inventar)它不会接受“\”,所以我只使用用户名和用户@域进行了尝试,但这也行不通。
  • 如果你使用[****** \ ******].[Inventar]?请注意,它是一个奇怪的架构名称,可能需要修复。
  • 你说的完全正确,这很愚蠢。很好,我不是设置它的人 :-) 我已将变量设置为“从“域\用户”.Inventar 中选择 *,这很有效。谢谢!
  • 我可以在任何地方将您的评论设置为答案吗?

标签: sql powershell


【解决方案1】:

如果您执行Select * FROM Inventar 之类的操作,sql server 将假定该表位于dbo 架构中。如果不是,你会得到一个错误,就像你得到的一样。解决方案是限定模式:(database).schema.table。您的表位于名为 domain\user 的模式中。由于对象名称中不允许使用反斜杠,因此您需要对其进行转义。您可以通过将架构包围在 []"" 中来做到这一点:

[****** \ ******].[Inventar]

"****** \ ******"."Inventar"

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 2018-07-15
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多