修剪临时表中的所有列并选择数据

时间:2011-08-31 21:46:48

标签: sql trim temp-tables

快速提问。

我首先选择一个数据集INTO 临时表

临时表的列中包含的数据包含额外的空格。许多列存在额外的空格。所以,我用Google搜索了如何删除列中的所有空格。

找到此解决方案SQL Server: How to perform Rtrim on all varchar columns of a table

但是,我尝试为临时表实现相同的功能,但它不能正常工作,因为临时表是在不同的模式中创建的。

所以,我修改了同样的并尝试过。但没有运气。 有人能指出我,我做错了吗?

代码如下:

DECLARE @Op NVARCHAR(1000)
DECLARE @table_name AS VARCHAR(300) 

SET @table_name = (SELECT TOP 1 [name] FROM tempdb..sysobjects WHERE name LIKE '#tempFinalResults%')

SET @Op = ' UPDATE ' + @table_name + ' SET COLUMN_NAME = LTRIM(RTRIM(COLUMN_NAME)) FROM tempDB.information_Schema.Columns WHERE DATA_Type IN (''varchar'', ''char'', ''nchar'', ''nvarchar'')'

Exec sp_executesql @Op

Select * from #tempFinalResults

谢谢你们。欣赏它。

感谢, 肖恩

2 个答案:

答案 0 :(得分:2)

如果您知道哪些列需要修剪,您可以将它们作为选择的一部分修剪到临时表中,如

SELECT 
ID,
RTRIM(myCharColumn1) as myColumn1,
RTRIM(myCharColumn2) as myColumn2,
RTRIM(myCharColumn3) as myColumn3
INTO #myTempTable
WHERE.....

答案 1 :(得分:1)

您的问题是您必须使用SELECT语句构建列名列表,以便它遍历所有列。

我认为这可行:

DECLARE @Op NVARCHAR(3000)
DECLARE @table_name AS VARCHAR(300) 

SET @table_name = (SELECT TOP 1 [name] FROM tempdb..sysobjects WHERE name LIKE '#tempFinalResults%')

SELECT @Op = COALESCE(@Op + ',[', '[') + COLUMN_NAME +
    '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))' 
FROM 
    tempDB.information_Schema.Columns 
WHERE 
    DATA_Type IN ('varchar', 'char', 'nchar', 'nvarchar')

SET @Op = 'UPDATE [' + @table_name + '] SET ' + @Op

Exec sp_executesql @Op