我有这个查询,该查询应该获得表中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上调用方法。”
答案 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]