select语句中的SQL更新

时间:2016-01-19 08:08:18

标签: sql sql-server select sql-update

我的问题是:我需要从我的数据库中选择包含NrPad列的所有db-table,对于这个表我需要更新列NrPad

我已经有了一个有效的选择和更新声明:

JDK_directory/lib

我的问题是:如何将这两个语句合并在一起?

我愿意接受建议,非常感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

没有测试你的情况,但你可以做一个更新 - 设置 - 从哪里。

使用多个答案查看此问题:How do I UPDATE from a SELECT in SQL Server?

答案 1 :(得分:0)

也许有人会评判我,但我能做的就是光标

Unable to cast the type 'Domain.Test' to type 'Domain.Interfaces.IEnabledEntity'. LINQ to Entities only supports casting EDM primitive or enumeration types.

这就是你在SQLSERVER中编写光标的方法,我真的不想为Oracle编写另一个代码。所以请标记下次使用的dbms

答案 2 :(得分:0)

您可以修改select语句以生成更新语句,然后执行所有语句。

下面使用Oracle的字符串文字。

select 'Update ' || t.name || q'[ Set NrPad = CASE WHEN Len(Nr) < 10 THEN '0' + Convert(Nvarchar,Len(Nr)) ELSE Convert(Nvarchar,Len(Nr)) END + Nr;]'
from sys.tables t
inner join sys.columns c
on t.object_id = c.object_id
where c.name like 'NrPad' 

答案 3 :(得分:0)

使用INFORMATION_SCHEMA而不是sys.tables,并创建一个动态SQL语句,如下所示:

DECLARE @sql varchar(max) = '';

SELECT
    @sql = @sql + '; UPDATE ' + c.TABLE_NAME + ' SET NrPAd = CASE WHEN LEN(Nr)<10 THEN ''0'' + CONVERT(NVARCHAR,LEN(NR)) ELSE CONVERT(NVARCHAR,LEN(NR)) END + Nr'
FROM INFORMATION_SCHEMA.COLUMNS c
where c.COLUMN_NAME = 'NrPad'


print @sql -- for debugging purposes
exec (@sql)

这假设所有包含NrPad列的表格都有Nr列。如果您需要检查这些内容,或者只是需要使用特定表格中的Nr列,则它会有所不同(要么再次加入INFORMATION_SCHEMA.COLUMNS,要么加入Anglage获取Nr的值或检查Nr是否是该表上的列。