我想用相同的列名更新多个表

时间:2019-08-13 08:34:54

标签: sql sql-server sql-update

我希望修改此查询,因为如果列中有多个ID,则输出仅显示一个。 所以我希望输出像这样-

UPDATE table_name SET column_name = table_name + ID 

有人可以帮忙吗?

我试图更改代码,但是现在我被卡住了,请帮助:)

Select 'Update ' +  t.name  + ' set ' + c.name +  ' = ''' + t.name + CAST( c.column_id as nvarchar(200))''''
FROM         sys.columns c 
    JOIN sys.tables t ON c.object_id = t.object_id 
Where c.name = 'name'

我希望输出是这样的- UPDATE table_name SET列名= table_name + ID

1 个答案:

答案 0 :(得分:0)

据我所知,您在右引号之前缺少“ +”。这是否满足您的需求?

SELECT 'Update ' + t.name + ' set ' + c.name +  ' = ''' + t.name + CAST(c.column_id as nvarchar(200)) + ''''
FROM
    sys.columns c 
    JOIN sys.tables t ON c.object_id = t.object_id 
WHERE c.name = 'name'

修改

对于唯一的行号参考,如果您可以标识ID列,则可以看到一种方法(您可以通过查看{{1}中的is_identity字段来动态检索此名称) }或相关的一组唯一列,例如:

sys.columns

但是,我不确定如果没有这些,是否有可能。考虑以下伪代码:

SELECT
'UPDATE ' + t.name + '
SET ' + c.name +  ' = UpdatedName
FROM
    ' + t.name + ' T
    JOIN
        (
            SELECT
                id
                , ''' + t.name + ''' + CAST(ROW_NUMBER() OVER (ORDER BY id) AS varchar(20)) UpdatedName
            FROM ' + t.name + '
        ) N
    ON T.id = N.id' [Statement]
FROM
    sys.columns c 
    JOIN sys.tables t ON c.object_id = t.object_id 
WHERE c.name = 'name'

这会给您一个错误:

  

窗口函数只能出现在SELECT或ORDER BY子句中。