簡體   English   中英

修剪臨時表中的所有列並選擇數據

[英]Trim All columns in a temp table and Select data

得到一個簡短的問題。

我首先選擇一個數據集放入臨時表

臨時表的列中包含的數據中包含額外的空格。 存在許多帶有多余空格的列。 因此,我用谷歌搜索了如何刪除列中的所有空格。

找到了此解決方案SQL Server:如何在表的所有varchar列上執行Rtrim

但是,我嘗試為臨時表實現相同的功能,但是由於臨時表是在不同的架構中創建的,因此它無法按原樣工作。

因此,我修改了相同的內容並進行了嘗試。 但沒有運氣。 有人可以指出我做錯了什么嗎?

代碼如下:

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

多謝你們。 欣賞它。

謝謝,肖恩

如果您知道需要修剪哪些列,則可以將它們修剪為臨時表的一部分,例如

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

您的問題是您必須使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM