我正在处理运行SQL Server 2000 SP1的服务器,其中一个数据库的逻辑文件名似乎包含尾随空格。 就是这个查询:
select replace(name, ' ', 'X') from sysfiles
返回预期的名字加上一长串X。
我该如何处理? 我试着运行ALTER DATABASE …修改文件使用名称(有和没有空格),并得到一个错误消息,告诉我该文件不存在。
这不是由于名称实际上有空格,这是因为Sql Server将这些数据存储在nchar(128)types的字段中,这是一个固定宽度的字符数据types (即数据存储将总是128个字符长,必要时填充空格)。 所以,当你查询这个值时,你总是会得到一个长度为128个字符的types。 如果要修剪数据types的尾部空格,只需将其转换为可变长度的数据types,或者明确地修剪它,如下所示:
select cast(name as nvarchar(128)) as name from sysfiles
要么
select rtrim(name) as name from sysfiles
或者如果您计划插入到另一个表中,则在目标数据types是可变长度和兼容的情况下,它将隐式转换:
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