获取作为 varchar 插入的 nvarchar 记录
Get nvarchar records that were inserted as varchar
如何获取 NVARCHAR
列的所有值,其中一些值是在不使用 N
前缀的情况下意外插入的,因此被替换为 ?
,然后更改这些值转换为正确的形式?
例如,如果我有以下内容:
CREATE TABLE #Test
(
Value nvarchar(max)
)
INSERT INTO #Test(Value) values(N'иытание1')
INSERT INTO #Test(Value) values('иытание2')
INSERT INTO #Test(Value) values(N'иытание3')
SELECT * FROM #Test
输出:
Value
-------
иытание1
????????2
иытание3
我想得到原来'иытание2'
后来变成乱码的东西,并修复它。
你不能,因为它在插入 table 时 转换 为 ?
。原来的数据没了。文字字符串创建为 VARCHAR
除非您在其前面加上 N
.
您可以使用以下查询找出仅包含 ASCII 字符的行。
Reference SO post on finding non-ascii characters
-- > 0 means NON-ASCII characters are present
-- = 0 means only ASCII characters are present
SELECT * FROM #TEST
WHERE
patindex('%[^ !-~]%' COLLATE Latin1_General_BIN,VALUE) = 0
????????2
如何获取 NVARCHAR
列的所有值,其中一些值是在不使用 N
前缀的情况下意外插入的,因此被替换为 ?
,然后更改这些值转换为正确的形式?
例如,如果我有以下内容:
CREATE TABLE #Test
(
Value nvarchar(max)
)
INSERT INTO #Test(Value) values(N'иытание1')
INSERT INTO #Test(Value) values('иытание2')
INSERT INTO #Test(Value) values(N'иытание3')
SELECT * FROM #Test
输出:
Value
-------
иытание1
????????2
иытание3
我想得到原来'иытание2'
后来变成乱码的东西,并修复它。
你不能,因为它在插入 table 时 转换 为 ?
。原来的数据没了。文字字符串创建为 VARCHAR
除非您在其前面加上 N
.
您可以使用以下查询找出仅包含 ASCII 字符的行。
Reference SO post on finding non-ascii characters
-- > 0 means NON-ASCII characters are present
-- = 0 means only ASCII characters are present
SELECT * FROM #TEST
WHERE
patindex('%[^ !-~]%' COLLATE Latin1_General_BIN,VALUE) = 0
????????2