SQL Server:如何在表的所有varchar列上执行Rtrim

atr*_*lla 19 sql sql-server string sql-server-2008

我的表中有超过30列(sql server 2008).列类型为varchar(x).我知道在每列中,列值末尾有两个额外的空格.如何对所有列使用rtrim函数并将此修改保存到此现有表中?

编辑:有没有办法使用存储过程或游标,我不必手动声明所有列?

Ada*_*Dev 33

对于通用方法,您可以使用这样的脚本为您生成给定表的语句(如果您有许多列,则非常有用):

DECLARE @SQL VARCHAR(MAX)
DECLARE @TableName NVARCHAR(128)
SET @TableName = 'YourTableName'

SELECT @SQL = COALESCE(@SQL + ',[', '[') + 
              COLUMN_NAME + ']=RTRIM([' + COLUMN_NAME + '])'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
    AND DATA_TYPE = 'varchar'

SET @SQL = 'UPDATE [' + @TableName + '] SET ' + @SQL
PRINT @SQL
Run Code Online (Sandbox Code Playgroud)

这只会打印出SQL语句.然后你可以复制+运行语句,或者只是EXECUTE(@SQL).这是未经测试的,所以只需先在测试表上试试:)

  • @Shiva - 没有.CHAR和NCHAR值总是用空格填充,所以这没有任何意义.可以包括NVARCHAR,但OP的问题主要围绕VARCHAR (2认同)

Mar*_*tos 20

UPDATE xxx
  SET col1 = RTRIM(col1),
      col2 = RTRIM(col2),
      col3 = RTRIM(col3),
      ...
Run Code Online (Sandbox Code Playgroud)