我的表(sql server 2008)中有30多列。列类型为varchar(x)。我知道在每一列中,在列值的末尾都有两个额外的空格。如何对所有列使用rtrim函数,并将修改保存到这个已有的表中?
编辑:有没有一种方法可以使用存储过程或游标来做到这一点,这样我就不必手动声明所有的列?
发布于 2010-03-31 18:53:28
对于一般的方法,您可以使用如下脚本为给定表生成语句(如果您有很多列,则非常有用!):
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
这将只打印出SQL语句。然后,您可以复制并运行该语句,也可以只使用EXECUTE(@SQL)
。这是未经测试的,所以只需先在测试台上进行测试:)
发布于 2010-03-31 18:46:04
UPDATE xxx
SET col1 = RTRIM(col1),
col2 = RTRIM(col2),
col3 = RTRIM(col3),
...
发布于 2015-03-05 14:11:52
我们可以在specific schema
下使用存储过程来裁剪specific table
。如果我们有不同于默认dbo
架构的架构名称,最好通过传递架构名称和表名来使用此SP。这将同时执行LTRIM
和RTRIM
。此SP将检查char
、nchar
、varchar
、nvarchar
列。
CREATE PROCEDURE [dbo].[TrimAllColumnsOfTable] @SchemaName Varchar(100),@TableName Varchar(100)
AS
BEGIN
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ',[', '[') +
COLUMN_NAME + ']=LTRIM(RTRIM([' + COLUMN_NAME + ']))'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @SchemaName AND TABLE_NAME = @TableName AND DATA_TYPE Like '%char%'
SET @SQL = 'UPDATE [' + @SchemaName + '].[' + @TableName + '] SET ' + @SQL
EXEC (@SQL)
END
用法:[TrimAllColumnsOfTable] 'SchemaName','TableName'
https://stackoverflow.com/questions/2552154
复制相似问题