我有两列的表,一个是Varchar
类型和其他在NVarchar
的。SQL服务器:为nvarchar为varchar
我想更新所有的行,以便VarcharField = NVarcharField。
它不会让我,因为某些行包含未在varchar
列允许与当前代码页字符。
我怎样才能找到这些行?
是否可以删除不适合我使用的是特定的代码页中的任何字符?
SQL Server 2012的
我有两列的表,一个是Varchar
类型和其他在NVarchar
的。SQL服务器:为nvarchar为varchar
我想更新所有的行,以便VarcharField = NVarcharField。
它不会让我,因为某些行包含未在varchar
列允许与当前代码页字符。
我怎样才能找到这些行?
是否可以删除不适合我使用的是特定的代码页中的任何字符?
SQL Server 2012的
如果因为你从TRY_CONVERT
而不是预期的NULL
得到问号Gordon's approach不起作用,试试这个方法:
SELECT IsConvertible = CASE WHEN NULLIF(REPLACE(TRY_CONVERT(varchar(max), N'人物'), '?',''), '') IS NULL
THEN 'No' ELSE 'Yes' END
如果你需要它作为过滤器不能转换的行:
SELECT t.*
FROM dbo.TableName t
WHERE NULLIF(REPLACE(TRY_CONVERT(varchar(max), t.NVarcharField), '?',''), '') IS NULL
您可以尝试转换的nvarchar()
山坳到varchar()
找到行:
select nvarcharcol
from t
where try_convert(varchar(max), nvarcharcol) is null;
它是否工作?因为当我使用它'try_convert'返回'??'不为空的中文字母。经过测试:'SELECT try_convert(varchar(max),N'人物')' –
这个转换为什么会失败?这个答案对我来说没有意义。 – DavidG
@TimSchmelter,也许你现在的代码页支持中文? –
试试这个..
与那些价值发现的行不支持varchar
declare @strText nvarchar(max)
set @strText = 'Keep calm and say தமிழன்டா'
select cast(@strText as varchar(max)) col1 , N'Keep calm and say தமிழன்டா' col2
这里@strText
有非英文字符,当您尝试cast
到这一点varchar
非英语字符变成????
。所以col1
和col2
是不相等的。
select nvar_col
from tabl_name
where nvar_col != cast(nvar_col as varchar(max))
是否可以删除不适合我使用的是特定的代码页中的任何字符?
update tabl_name
set nvar_col = replace(cast(nvar_col as varchar(max)),'?','')
where nvar_col != cast(nvar_col as varchar(max))
与空字符串替换?
和更新。
你真的想删除不支持的字符吗?你为什么需要这个? –
我无法使用Nvarchar。 –