【问题标题】:SQL Server table with different case in PowerShell SMO vs SSMSPowerShell SMO 与 SSMS 中不同大小写的 SQL Server 表
【发布时间】:2019-05-11 15:05:01
【问题描述】:

我很困惑,不知道从哪里开始寻找。我有一个表名,它出现在不同大小写的 sys.object 和 SSMS GUI 中,而不是通过 SMO 检索它

例如在 SSMS 中我看到“TABLENAME”,但在 Smo 中我看到“TableName”。这导致 IBM 应用程序出现问题,我正在努力找出原因。

$table = $SmoServer.Databases.Item("MyDb").Tables.Item("TABLENAME","dbo")
Write-Output $table

给定的输出是“表名”。

虽然运行 sql 查询:

select [name] from sys.objects where name = 'TABLENAME'

给定的输出是“TABLENAME”。

这无关紧要,但排序规则不区分大小写。

有人有什么想法吗?

谢谢。

【问题讨论】:

  • 有趣的是,这会导致问题,因为 SQL 语言不应该区分大小写。这听起来更像是 IBM 方面的问题。
  • SSMS 和 SMO 都使用目录视图,所以我希望看到相同的案例。你确定你连接到同一个服务器吗?
  • 检查 SQL 服务器排序规则,是否区分大小写,并检查同名表是否存在于多个架构中。
  • 乔尔,是的,同意。该应用程序很困难,但我仍然想了解正在发生的事情,也许看看我是否能找到解决办法。担。是的,同一台服务器。丹尼尔。如上所述,排序规则不区分大小写,不,只有一个模式:/
  • 需要明确的是,我对我建议您自行回答问题的那一点并不讽刺,那是真诚的。问题不应包含答案。

标签: sql-server powershell tsql ssms smo


【解决方案1】:

这似乎是使用 Item 方法从 SMO Tables 对象中检索表的一个怪癖。第一次检索表时,它似乎返回了带有方法参数中提供的大小写的表。如果我用不同的大小写再次运行 Item 方法,它仍然会在第一次调用时输出大小写。

例如:

第一次运行:

$SmoServer.Databases.Item("MyDb").Tables.Item("TableName","dbo")

将输出上述参数中提供的“TableName”,即使该表实际上是“TABLENAME”。

第二次运行:

$SmoServer.Databases.Item("MyDb").Tables.Item("TableNAME","dbo")

即使我更改了大小写,仍会输出“TableName”。如果我重新创建 smoServer 对象,它只会输出“TableNAME”的新大小写。

有趣的行为。我想我会改用 Where-Object。

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2012-10-05
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多