Collate declared SQL variable(整理声明的 SQL 变量)
问题描述
我一直在查看这段代码复制如下,它寻找非 ASCII 字符......
I've been looking at this code, reproduced below, that looks for non-ASCII characters...
select line,
patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line) as [Position],
substring(Line, patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line), 1) as [InvalidCharacter],
ascii(substring(line, patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line), 1)) as [ASCIICode]
from staging.APARMRE1
where patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line) > 0
我突然想到我想为 '%[^ !-~]%' COLLATE Latin1_General_BIN 声明一个变量,而不是每次都写出来,但是
and it just strikes me that I'd want to declare a variable for '%[^ !-~]%' COLLATE Latin1_General_BIN instead of writing it out every time, but
declare @regex varchar(20) = '%[^ !-~]%' COLLATE Latin1_General_BIN;
select line,
patindex(@regex, Line) as [Position],
substring(Line, patindex(@regex, Line), 1) as [InvalidCharacter],
ascii(substring(line, patindex(@regex, Line), 1)) as [ASCIICode]
from staging.APARMRE1
where patindex(@regex, Line) > 0
只是不做同样的事情.我只是缺少一些语法吗?不可能吗?
just doesn't do the same thing. Am I just missing some syntax? Is it impossible?
推荐答案
这是正常的.创建变量时,它采用数据库的默认排序规则.
It is normal. When you create a variable it takes default collation for database.
DECLARE @regex varchar(20) = '%[^ !-~]%' COLLATE Latin1_General_BIN;
带有 COLLATE Latin1_General_BIN 的字符串被隐式转换为带有数据库默认排序规则的字符串.
Your string with COLLATE Latin1_General_BIN is implicitly casted to string with your database default collation.
<小时>例如数据库是Case-Insensitive.我使用您的语法创建区分大小写的语法并检查它的元数据:
For example database is
Case-Insensitive. I use your syntax to create case-sensitive one and check metadata of it:
DECLARE @v1 varchar(100) = 'ABC' COLLATE Latin1_General_CS_AS;
SELECT name, collation_name
FROM sys.dm_exec_describe_first_result_set(
N'SELECT @v1 AS [@v1]', N'@v1 varchar(100)', 0);
LiveDemo强>
输出:
╔══════╦══════════════════════════════╗
║ name ║ collation_name ║
╠══════╬══════════════════════════════╣
║ @v1 ║ SQL_Latin1_General_CP1_CI_AS ║
╚══════╩══════════════════════════════╝
变量(不包括表变量中的列)不允许定义排序规则,因此没有如下语法:
Variables(excluding columns in table variables) do not allow to define collation so there is no syntax like:
DECLARE @v1 varchar(100) COLLATE Latin1_General_CS_AS = 'ABC' ;
-- Incorrect syntax near the keyword 'COLLATE'.
这篇关于整理声明的 SQL 变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:整理声明的 SQL 变量
基础教程推荐
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 无法解决整理冲突 2021-01-01
