SQL server中用一段语句得到的查询结果 怎么当成一张新表进行更新操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server中用一段语句得到的查询结果 怎么当成一张新表进行更新操作相关的知识,希望对你有一定的参考价值。

我用一段SQL语句得到的结果作为EXCEL表发给顾客修改表中的某一列数据,然后顾客将修改好的表发回给我,这时我将发回给我的表作为临时表导入数据库,然后想通过UPDATE语句将修改结果回写到数据库中,该怎么做?我的sql语句是下面这么写的,但是是不正确的:
update(select b.pName,a.pItemName,a.pItemspecdesc,c.pcost from a,b,c
where a.pitemcatyid=b.pitemcatyid and a.pitemmodel=c.pitemmodel) e
set e.pname=临时表.pname
where e.pitemname=临时表.pitemname
我重新整合了一下语段:
update e
set e.pname=临时表.pname
from
(select b.pName,a.pItemName,a.pItemspecdesc,c.pcost from
a inner join b on a.pitemcatyid=b.pitemcatyid
inner join c on a.pitemmodel=c.pitemmodel )e
inner join 临时表 on e.pitemname=临时表.pitemname
语段可以执行,但是执行的结果数不对,正确应该更行的行数是945,但是执行的结果数位4和6行,但是查询没被更新的行数是832行。。。折腾了一个上午都还是搞不定啊/(ㄒoㄒ)/~~

参考技术A 不要这样搞……

使用
update e
set e.pname=临时表.pname
from
a inner join b on a.pitemcatyid=b.pitemcatyid
inner join c on a.pitemmodel=c.pitemmodel
inner join 临时表 on e.pitemname=临时表.pitemname追问

不行啊,表e 都没定义,我上面那段语句里表e是指代:
select b.pName,a.pItemName,a.pItemspecdesc,c.pcost from a,b,c
where a.pitemcatyid=b.pitemcatyid and a.pitemmodel=c.pitemmodel
的查询结果的,但是也是报错的;你的语句我照着执行了一下,提示 对象名‘e'无效

追答

那你对比一下
(select b.pName,a.pItemName,a.pItemspecdesc,c.pcost from
a inner join b on a.pitemcatyid=b.pitemcatyid
inner join c on a.pitemmodel=c.pitemmodel ) 和
临时表里面的数据,看下能对上的到底有多少个。只看语句我觉得没问题的

参考技术B 建议把子查询拆分,多建几个临时表,确保中间结果正确再更新 参考技术C 你说的是视图吧。。 把你查询的结果作为一个试图 可以在这个是他上进行操作。

hibernate 使用sql server的存储过程时没有返回值

最近做项目时遇到这样一个问题:写了sql语句:执行sqlserver的存储过程的得到一个返回值,使用hibernate进行执行这个sql,结果没有报错,执行这个语句程序就中止了,随后我使用trycache去捕捉这个异常,得到的结果是:

 

 实际上是要给存储过程加上这一段话:


SET XACT_ABORT on;
SET NOCOUNT ON;
begin tran;

 

存储过程结尾插上这样一段话:

COMMIT TRAN
RETURN

ErrerHandle:
ROLLBACK TRAN
RETURN

这样就就就okkkkkkkk了,至于原理。。。。。,有兴趣的小伙伴知道了可以给我留言啊啊啊啊啊啊啊啊啊啊啊啊啊啊

-------------------------2020年9月3日19:30:16-------------------------------------------

在存储过程中,经常用到SET NOCOUNT ON;

作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。
当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;

即使当SET NOCOUNT ON 时候,也更新@@RowCount;

当SET NOCOUNT on时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能;

SET NOCOUNT 指定的设置时在执行或运行时候生效,分析时候不生效。

以上是关于SQL server中用一段语句得到的查询结果 怎么当成一张新表进行更新操作的主要内容,如果未能解决你的问题,请参考以下文章

sql server查询数据不一致

怎样用SQL语句查询以20%来分段查询数据,如查询该表中数据数量20%到40%的数据怎查来。

sql Server 查询方法的优化

如何在java中用hql或sql查询得到某表的所有字段名?

sql server where 字段 is null 的问题

在SQL Server中用好模糊查询指令LIKE