Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整理声明的SQL变量_Sql_Sql Server_Tsql_Collate - Fatal编程技术网

整理声明的SQL变量

整理声明的SQL变量,sql,sql-server,tsql,collate,Sql,Sql Server,Tsql,Collate,我一直在看下面复制的,寻找非ASCII字符 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('%[^ !-~]%

我一直在看下面复制的,寻找非ASCII字符

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
我突然想到,我想为
“%[^!-~]%”声明一个变量,而不是每次都写出来,但是

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

只是不做同样的事。我只是缺少一些语法吗?这是不可能的吗?这是正常的。创建变量时,它采用数据库的默认排序规则

DECLARE @regex varchar(20) = '%[^ !-~]%' COLLATE Latin1_General_BIN;
带有
COLLATE-Latin1\u-General\u-BIN
的字符串被隐式转换为带有数据库默认排序规则的字符串


例如,数据库不区分大小写。我使用您的语法创建区分大小写的语法并检查其元数据:

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);

输出:

╔══════╦══════════════════════════════╗
║ name ║        collation_name        ║
╠══════╬══════════════════════════════╣
║ @v1  ║ SQL_Latin1_General_CP1_CI_AS ║
╚══════╩══════════════════════════════╝
变量(不包括表变量中的列)不允许定义排序规则,因此没有如下语法:

DECLARE @v1 varchar(100) COLLATE Latin1_General_CS_AS = 'ABC' ;
-- Incorrect syntax near the keyword 'COLLATE'.

关于您提到的例外情况:表变量。。。对于表类型,当我将数据传递到具有特定排序规则的表类型时,它会将输入数据强制转换到表类型列定义的排序规则中吗?