【问题标题】:Using REPLACE function to update a SQL Server table使用 REPLACE 函数更新 SQL Server 表
【发布时间】:2021-04-24 17:46:06
【问题描述】:

我正在使用以下内容更新 SQL Server 表中的值:

UPDATE TABLE1 
SET COLUMN_A = REPLACE(COLUMN_A, ',', '')

我需要对多个表执行此操作。

我目前正在手动操作,一次一列。

我会尝试在 SSIS 中使用 for each 循环组件执行此操作,但在当前环境中我无法访问 SSIS。

我希望得到一些关于如何使用循环来执行此操作的指导?

谢谢

【问题讨论】:

  • 您知道UPDATE 可以在一个语句中包含多个列,对吗?例如UPDATE Table1 SET Col1 = 1, Col2 = 2;
  • 您的问题与 CTE 有什么关系?您的问题中没有 CTE,也没有提及它。请仅添加与您的问题实际相关的标签。正如你也说过你不能使用 For Each 循环容器,我也删除了标签。
  • 谢谢Larnu,这真的很有用,可能会在excel中使用一个公式来为整个表格创建它。关于 CTE 标签,在发布堆栈溢出之前,我已经在谷歌上搜索过这个问题,我发现 CTE 作为一种可能的解决方案,我会在以后的帖子中记下这一点。
  • 感谢 Abhijeet Khandagale,我会调查该链接

标签: sql sql-server tsql replace


【解决方案1】:

我认为你可以使用 Dyanmic SQL 来做到这一点,例如,你可以使用

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

并添加一些条件来查找所有表名、列名。

然后使用动态sql作为循环,一张一张地去表。

DROP TABLE IF EXISTS #temp

CREATE TABLE #temp ---identity column will be used to iterate
(
id INT IDENTITY,
TableName VARCHAR(20),
ColumnName VARCHAR(20)
)

INSERT INTO #temp
SELECT TABLE_NAME,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
-- choose your own results with where conditions

DECLARE @SQL VARCHAR(MAX)
DECLARE @Count INT = 1
DECLARE @Table VARCHAR(20)
DECLARE @Column VARCHAR(20)

WHILE @COUNT <= (SELECT COUNT(*) FROM #temp) 
BEGIN
    SELECT @table = TABLENAME FROM #temp WHERE id = @Count
    SELECT @Column = COLUMNNAME FROM #temp WHERE id = @Count
    SELECT @sql = 'SELECT TOP 10 '+@column +' FROM '+ @table

    PRINT @SQL
SET @Count = @Count + 1

END

【讨论】:

  • 我只是为每个循环使用了 select 语句,您应该更改为您的查询。如果您觉得打印结果不错,请确保将 print 更改为 EXEC
  • 感谢 Jiacheng,我替换了我的查询,它生成了我需要的所有 UPDATE 语句的打印,我在单独的查询窗口中运行这些语句。我已按照您的建议将 PRINT 命令更改为 EXEC,但它输出错误“找不到存储的过程 'UPDATE .....' 我的问题已通过 PRINT 输出解决,因此感谢您的帮助,请注意安全。
  • 提示:将对象名称组装成动态 SQL 语句时的最佳做法是使用 QuoteName() 以避免出现奇怪名称的问题,例如New Table 带有空格或保留字,例如 From
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 2014-08-30
  • 2018-04-22
  • 2014-11-30
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多