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 修剪列/表的主要内容,如果未能解决你的问题,请参考以下文章