TSQL 修剪列/表

Posted

技术标签:

【中文标题】TSQL 修剪列/表【英文标题】:TSQL trim columns/table 【发布时间】:2016-11-03 17:05:17 【问题描述】:

我正在导入 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)运行它的方法吗?

我可以手动将 [Column 1] 更改为 [Column 2]、[column 3] 等。但是需要很长时间,并且我需要在未来重复几次。

但如果知道如何一次性完成所有这些操作,那就太好了。

谢谢

【问题讨论】:

动态 SQL,循环遍历从表模式中选择的列名,将一系列 UPDATE 语句组合成一个字符串,然后使用 EXECUTE 运行 无论是@dlatikay 所说的,还是使用表模式生成一个包含 40 多个更新语句的脚本。 感谢您提供快速答案:) 我仍然是 TSQL 的初学者,我发布的这个脚本是我在此处找到的一些内容的“重制版”。不知道你的意思是什么,如何写,但现在正在寻找,谷歌搜索 类似这样的:***.com/a/12847111/1132334 或这样的:***.com/a/12847648/1132334,或两者的组合 数据中的" 会造成什么样的混乱?如果它们注定要在那里,并且您正在使用数据,例如 ASP.NET 应用程序,那么它们应该在其他地方处理。 【参考方案1】:

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

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

我确实意识到为 40 列执行此操作有点费力,但它比使用动态 SQL 更容易,您只需复制粘贴或进行替换即可更快地完成。

【讨论】:

【参考方案2】:

您可以使用动态 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)

【讨论】:

以上是关于TSQL 修剪列/表的主要内容,如果未能解决你的问题,请参考以下文章

2017-03-13Tsql 表连接

TSQL - 计算多语句表 UDF 中的特定值并将它们传递给附加列

SQL/TSQL:在多个表上使用 PIVOT

1201新课程TSQL语句

TSQL - 如何在插入之前根据不同列中的值检查值?

tsql 将列合并到一张表中