izquierda - trim sql server 2008
SQL Server: cómo realizar Rtrim en todas las columnas varchar de una tabla (5)
Es perfecto ... Pero recuerda poner también la cláusula where
:
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+''.''+TABLE_NAME),COLUMN_NAME,''IsComputed'') = 0
De lo contrario, obtendrá un error si la tabla tiene una columna calculada del tipo "%char%"
.
Tengo más de 30 columnas en mi tabla (servidor SQL 2008). Tipo de columnas son varchar (x). Sé que en cada columna hay dos espacios adicionales al final del valor de la columna. ¿Cómo usar la función rtrim para todas las columnas y guardar esta modificación en esta tabla existente?
Edición: ¿hay alguna forma de hacerlo utilizando un procedimiento almacenado o un cursor donde no tenga que declarar manualmente todas las columnas?
La respuesta aceptada funciona bien. Me encontré con un problema con una tabla temporal que se llama el mismo nombre. Puedes añadir
and TABLE_SCHEMA = ''dbo''
Y eso se librará de la colisión en los nombres de las mesas.
Podemos tener un procedimiento almacenado para recortar specific table
specific schema
bajo specific schema
. Si tenemos diferentes nombres de esquema distintos del esquema dbo
predeterminado, es mejor usar este SP pasando el nombre de esquema y el nombre de la tabla. Esto realiza tanto LTRIM
como RTRIM
. Este SP verificará las nchar
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
USO: [TrimAllColumnsOfTable] ''SchemaName'',''TableName''
Para un enfoque genérico, puedes usar un script como este para generar la declaración para ti, para una tabla dada (¡útil si tienes muchas columnas!):
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
Eso solo imprimirá la declaración SQL. Puede copiar y ejecutar la instrucción, o simplemente EXECUTE(@SQL)
. Esto no se ha probado, así que pruébelo primero en una tabla de prueba :)
UPDATE xxx
SET col1 = RTRIM(col1),
col2 = RTRIM(col2),
col3 = RTRIM(col3),
...