我希望修改此查询,因为如果列中有多个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
答案 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子句中。