如何包含ToUpper()INSIDE查询条件?

时间:2018-09-18 15:08:14

标签: sql-server powershell

我有这个查询,该查询应该获得表中active = TRUE的所有结果,但是我想确保用户是否说过将表中的活动值更改为查询可识别的“ True”或“ tRue”通过始终以大写方式在查询条件上应用大写字母

$Table = Query "SELECT * from [dbo].[$cubeTable] WHERE [active] = 'TRUE'.ToUpper()"
write-host $Table += $row.Item("active")

注意,这就是我所拥有的,但是当然会引发错误

WHERE [active] = 'TRUE'.ToUpper()"
  

使用“ 1”参数调用“填充”的异常:“无法在varchar上调用方法。”

1 个答案:

答案 0 :(得分:2)

默认排序规则将默认提供您需要的功能(不区分大小写的匹配),但是,如果您想强制不区分大小写的匹配(如果您的排序规则区分大小写),则可以使用UPPER函数,但是请注意,导致对表进行全面扫描(因此可能会对性能产生重大影响)。

要检查您当前的归类:

SELECT DATABASEPROPERTYEX('DbName', 'Collation') SQLCollation;

这将为您提供排序规则,例如Latin1_General_CI_AS

这里CI的意思是Case Insensitive

如果您有这个,那您就很好了。如果没有,您可以这样做:

SELECT * from [dbo].[$cubeTable] WHERE UPPER([active]) = 'TRUE'

但这会扫描您的整个桌子。

如果您有能力更改架构,则可以根据需要对列进行排序:

CREATE TABLE [#CollationTest]
(
  [MyColumnName] VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
)  

INSERT INTO [#CollationTest] ([MyColumnName]) VALUES ('Value123')
INSERT INTO [#CollationTest] ([MyColumnName]) VALUES ('value123')


SELECT * FROM [#CollationTest] WHERE [MyColumnName] = 'value123' -- Returns 2 rows

DROP TABLE [#CollationTest]