在 SQL 2000/2005 中执行区分大小写的搜索和替换
SQL 2000/2005 不支持跨语言的全局变量或函数,区分大小写的搜索和替换必须直接在查询字符串(WHERE 子句和 ORDER BY 子句等)中手动键入关键字。以下是在 SQL 2000/2005 中执行区分大小写的搜索和替换的步骤:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'VARCHAR' AND CHARACTER_MAXIMUM_LENGTH = 255;
如果该查询找到任何区分大小写的列,则需根据需要进行更改或启用大小写区分策略。
USE MASTER; -- 设定当前数据库为 MASTER,因为在其他数据库中,区分大小写的搜索和替换将仅适用于当前数据库
GO
-- 假设要搜索的产品名称为 PRODUCTION_1
SELECT *
FROM Production
WHERE ProductName LIKE 'PRODUCTION\_1';
这将会查找 PRODUCTION_1
是否存在于以 PRODUCTION 开头的任何列中。要使用关键字的大写形式,请在关键字之前添加 COLLATE 声明:
GO
-- 使用 COLLATE 声明以区分大小写
SELECT *
FROM Production
WHERE ProductName LIKE 'PRODUCTION_1 COLLATE SQL_Latin1_General_CI_AS';
这将以区分大小写的形式查找 PRODUCTION\_1
是否存在于 PRODUCTION 字段中。SQL_Latin1_General_CI_AS
指定区分拉丁字符集和相应的大小写约定。
此外,还可以使用以下查询来检索已区分大小写的列:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'VARCHAR' AND DEFAULT_ON_UPDATE_ATAL = 'YES';
请注意,这将返回所有列中带有 ON UPDATE DEFAULT 选项的不区分大小写的列。
WITH Lowercases AS (
SELECT LOWER(ProductName) AS LowerCaseProduct
FROM Production
)
SELECT *
FROM Lowercases
WHERE LowerCaseProduct LIKE 'PRODUCTION\_1 COLLATE SQL_Latin1_General_CI_AS';
CTE 方法在查询结果中应用区分大小写的搜索,而原始查询则通过大写关键字进行筛选。
领取专属 10元无门槛券
手把手带您无忧上云