TSQL修剪柱/表

时间:2016-11-03 17:05:18

标签: sql sql-server tsql trim

我正在导入SSMS 2016 txt文件(逗号分隔,"文本限定符),但在文本中有很多"这只会造成混乱。

所以,我已将其导入为逗号分隔,没有错误看起来都很好。 列如下所示:

 "Ab-123-2      "
 "wheel 17"    "
 "hello "world"     "

用这些来清理它:

 UPDATE table1
 SET    [Column 1] = STUFF([Column 1], 1, 1, '')
 WHERE [Column 1] LIKE '"%'

 UPDATE table1
 SET    [Column 1] = REVERSE(STUFF(REVERSE([Column 11]), 1, 1, ''))
 WHERE [Column 1] LIKE '%"'

这似乎运作良好。删除第一个和最后一个"在第1列的每一行

我的问题是,在这个表中我有大约40列,是一种对整个表运行的方法(所有列1-40)?

我可以手动更改到处[第1列]到[第2列],[第3列]等等。但需要很长时间,我需要在将来重复这几次。

但是知道如何在一击中完成所有这些工作会很棒。

由于

2 个答案:

答案 0 :(得分:0)

将数据拉入表后,您可以使用此

UPDATE Table1
SET Column1 = RTRIM(LTRIM(REPLACE(Column1,'"',''))),
    Column2 = RTRIM(LTRIM(REPLACE(Column2,'"',''))),
    ...,
    ColumnN - RTRIM(LTRIM(REPLACE(ColumnN,'"','')))
WHERE...

我确实认识到对40列进行操作会有点麻烦,但它比使用动态SQL更容易,你只需复制粘贴或进行替换就可以更快地完成。

答案 1 :(得分:0)

您可以使用动态SQL创建UPDATE QUERY,如下所示:

在本例中,我认为表名是compute_node

        DECLARE @QUERY as VARCHAR(MAX)
        DECLARE @TABLENAME AS VARCHAR(50)

        SET @TABLENAME = 'compute_node'
        SET @QUERY =  'UPDATE [' + @TABLENAME + '] SET '

        SELECT @QUERY = @QUERY + '[' + COLUMN_NAME + '] = LTRIM(RTRIM(REPLACE([' + COLUMN_NAME + '],''"'',''''))) ,'
        FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TABLENAME

        SELECT @QUERY = SUBSTRING(@QUERY, 1 , LEN(@QUERY) - 1 )

        EXEC (@QUERY)