我正在导入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列]等等。但需要很长时间,我需要在将来重复这几次。
但是知道如何在一击中完成所有这些工作会很棒。
由于
答案 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)