Sql server 如何修复错误:更新@tentable字段时的多部分ID
我想将@TENTABLE与tableA进行比较,如果匹配,则更新@TENTABLE的FieldValue等于tableA的id;如果不匹配,则插入值,并获取tableA的id以更新@Entable的FieldValue 以下是我的SQL查询:Sql server 如何修复错误:更新@tentable字段时的多部分ID,sql-server,tsql,sql-server-2008,merge,sql-merge,Sql Server,Tsql,Sql Server 2008,Merge,Sql Merge,我想将@TENTABLE与tableA进行比较,如果匹配,则更新@TENTABLE的FieldValue等于tableA的id;如果不匹配,则插入值,并获取tableA的id以更新@Entable的FieldValue 以下是我的SQL查询: create table [dbo].[TableA]([Id] int Indentity(1,1),[Data] [sql_variant] NULL) declare @tempTable table (FieldValue nvarchar(10
create table [dbo].[TableA]([Id] int Indentity(1,1),[Data] [sql_variant] NULL)
declare @tempTable table (FieldValue nvarchar(1000),FieldType nvarchar(1000))
insert @tempTable values ('some content','A Type')
merge
tableA
using (
select
FieldValue
from
@tempTable
) x
on tableA.[Data] = x.FieldValue
when not matched then
insert values (x.FieldValue)
when matched then
update set x.FieldValue = tableA.[Id] ;
以下是错误消息:
无法绑定多部分ID“x.FieldValue”
这个错误看起来像是x.FieldValue和tableA.id之间的不同数据类型,所以我将它们调整为相同的数据类型,但它仍然不起作用,我不知道如何修复它。您想实现什么?您的目标表是
表A
,您的源表是x别名子查询
下次请尝试创建一个。我不得不稍微修改您的代码,但您将得到ghist:
declare @TableA TABLE([Id] int,[Data] [sql_variant] NULL)
declare @tempTable table (FieldValue nvarchar(1000),FieldType nvarchar(1000))
insert @tempTable values ('some content','A Type');
merge
@tableA a
using (
select
FieldValue
from
@tempTable
) x
on a.[Data] = x.FieldValue
when matched then
update set a.id = x.FieldValue; --fields swapped, probably not really your intention...
重点是:您的代码尝试更新源表的字段。MERGE
的总体思路是
- 我们以一个表为目标,在其中插入/更新/删除一些记录
- 我们使用第二组数据来比较和使用这些操作
- 我们在源
INSERT中缺少的行
更新
删除
中缺少的行这么说,我怀疑上面的代码是否需要合并…下面的代码可以达到我想要的结果
merge
tableA
using (
select
FieldValue
from
@tempTable
) x
on tableA.[Data] = x.FieldValue
when not matched then
insert values (x.FieldValue);
update @tempTable
set t.FieldValue = i.[Id]
from @tempTable t
join TableA i ON i.[Data] = t.FieldValue
select * from @tempTable
要添加到Schnugo的响应中,您要更新的表是tableA。您无法更新x中的列(这是@tentable)。谢谢,我修复了我的问题,并将文字分开。