SQL 服务器 table 在 PowerShell SMO 与 SSMS 中的大小写不同

SQL Server table with different case in PowerShell SMO vs SSMS

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

检索它

例如在 SSMS 中我看到 "TABLENAME" 但在 Smo 中我看到 "TableName." 这导致 IBM 应用程序出现问题,我正在努力弄清楚为什么会这样。

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

给出的输出是"TableName."

运行 sql 查询虽然:

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

给出的输出是"TABLENAME."

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

有没有人有什么想法?

谢谢。

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

例如:

第 1 运行:

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

将输出 "TableName" 如上面参数中提供的那样,即使 table 实际上是 "TABLENAME."

第二个运行:

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

即使我改变了外壳,仍然会输出 "TableName"。如果我重新创建 smoServer 对象,它只会输出 "TableNAME" 的新外壳。

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