Обрезать все столбцы во временной таблице и выбрать данные - PullRequest
1 голос
/ 01 сентября 2011

Получил быстрый вопрос.

Сначала я выбираю набор данных INTO в временную таблицу .

Данные, содержащиеся в столбцах временной таблицы, содержат дополнительные пробелыв них.Многие столбцы существуют с дополнительными пробелами.Итак, я погуглил, чтобы проверить, как убрать все пробелы в столбцах.

Нашел это решение SQL Server: Как выполнить Rtrim для всех столбцов таблицы varchar

Но я попытался реализовать то же самое для временной таблицы, но этоне работает как есть, так как временные таблицы создаются в другой схеме.

Итак, я изменил то же самое и попробовал.Но не повезло.Может кто-то указать мне, где я делаю это неправильно?

Код выглядит следующим образом:

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 ]

2 голосов
/ 01 сентября 2011

Если вы знаете, какие столбцы нужно обрезать, вы можете обрезать их, как часть вашего выбора, во временную таблицу, как в

SELECT 
ID,
RTRIM(myCharColumn1) as myColumn1,
RTRIM(myCharColumn2) as myColumn2,
RTRIM(myCharColumn3) as myColumn3
INTO #myTempTable
WHERE.....
1 голос
/ 01 сентября 2011

Ваша проблема в том, что вам нужно построить список имен столбцов с помощью оператора 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
...