如何从 SQL Server 逻辑文件名中删除尾随空格?

如何从 SQL Server 逻辑文件名中删除尾随空格?

我正在处理运行 SQL Server 2000 SP1 的服务器,其中一个数据库的逻辑文件名似乎包含尾随空格。即此查询:

select replace(name, ' ', 'X') from sysfiles

返回预期的名称加上一长串 X。

我该如何处理这个问题?我尝试使用名称(带空格和不带空格)运行 ALTER DATABASE...MODIFY FILE,但收到一条错误消息,告诉我该文件不存在。

答案1

这并不是因为名称中含有空格,而是因为 Sql Server 将此数据存储在以下类型的字段中nchar(128),固定宽度字符数据类型(即存储的数据将始终为 128 个字符长,必要时用空格填充)。因此,当您查询该值时,您将始终获得长度为 128 个字符的类型。如果您想修剪数据类型的尾部空格填充,只需将其转换为可变长度数据类型,或显式修剪它,如下所示:

select cast(name as nvarchar(128)) as name from sysfiles

或者

select rtrim(name) as name from sysfiles

或者如果您打算插入到另一个表中,如果目标数据类型是可变长度且兼容,它将隐式转换:

create table #files (name nvarchar(128));
insert #files (name) select name from sysfiles;
select name from #files;

如果你稍微修改一下上面的陈述,你会注意到不再有尾随的 X:

select replace(cast(name as nvarchar(128)), ' ', 'X') from sysfiles

相关内容