SQL 游标使用的小例子,对于每行数据根据参数的不同进行Insert或Update操作.
来源:互联网 发布:测量员软件 编辑:程序博客网 时间:2024/05/29 12:00
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[sp_GetAllProVersions]
@nodeText varchar(50)
as
declare @Versions_Currenttable table
(
ProjectId int,
devVersion varchar(100),
devStart datetime,
devEnd datetime,
qaVersion varchar(100),
qaStart datetime,
qaEnd datetime,
proVersion varchar(100),
proStart datetime,
proEnd datetime
)
-- 声明
declare cur_titles cursor
for
--select a.*,ver.VersionNumber,convert(varchar(10),ver.StatusSince,120) as StatusSince,convert(varchar(10),ver.NextStatusBy,120) as NextStatusBy from
--(
-- select distinct D_V.ProjectID as ProjectId,max(D_V.AutoID) as D_AutoID,D_V.VersionCurrentStateID as D_VersionCS
-- from dbo.CurrentState as D_C
-- inner join Versions as D_V
-- on D_C.CurrentStateID=D_V.VersionCurrentStateID
-- group by D_V.ProjectID,D_V.VersionCurrentStateID,D_C.CurrentStateName
--) as a
--inner join dbo.Versions as ver
--on a.D_AutoId=ver.AutoID order by a.ProjectId
select a.ProjectId,ver.AutoID as D_AutoID,a.D_VersionCS,a.VersionNumber,convert(varchar(10),ver.StatusSince,120) as StatusSince,convert(varchar(10),ver.NextStatusBy,120) as NextStatusBy from
(
select distinct D_V.ProjectID as ProjectId,max(D_V.VersionNumber) as VersionNumber,D_V.VersionCurrentStateID as D_VersionCS
from dbo.CurrentState as D_C
left join Versions as D_V
on D_C.CurrentStateID=D_V.VersionCurrentStateID
group by D_V.ProjectID,D_V.VersionCurrentStateID,D_C.CurrentStateName
) as a
inner join dbo.Versions as ver
on a.ProjectId=ver.ProjectId and a.versionNumber=ver.versionNumber and a.D_VersionCS=ver.VersionCurrentStateID order by a.ProjectId
-- 打开
open cur_titles
declare @ProjectId int
declare @D_AutoID varchar(20)
declare @D_VersionCS varchar(20)
declare @VersionNumber varchar(20)
declare @StatusSince datetime
declare @NextStatusBy datetime
declare @Version datetime
FETCH cur_titles INTO @ProjectId,@D_AutoID,@D_VersionCS,@VersionNumber,@StatusSince,@NextStatusBy
WHILE @@FETCH_STATUS=0
BEGIN
if(@D_VersionCS=1)
if exists(select * from @Versions_Currenttable where ProjectId=@ProjectId)
begin
update @Versions_Currenttable set devVersion=@VersionNumber,devStart=@StatusSince,devEnd=@NextStatusBy where ProjectId=@ProjectId
End
else
begin
insert into @Versions_Currenttable(ProjectId,devVersion,devStart,devEnd)
values(@ProjectId,@VersionNumber,@StatusSince,@NextStatusBy)
end
if(@D_VersionCS=2)
if exists(select * from @Versions_Currenttable where ProjectId=@ProjectId)
begin
update @Versions_Currenttable set qaVersion=@VersionNumber,qaStart=@StatusSince,qaEnd=@NextStatusBy where ProjectId=@ProjectId
End
else
begin
insert into @Versions_Currenttable(ProjectId,qaVersion,qaStart,qaEnd)
values(@ProjectId,@VersionNumber,@StatusSince,@NextStatusBy)
end
if (@D_VersionCS=3)
if exists(select * from @Versions_Currenttable where ProjectId=@ProjectId)
begin
update @Versions_Currenttable set proVersion=@VersionNumber,proStart=@StatusSince,proEnd=@NextStatusBy where ProjectId=@ProjectId
End
else
begin
insert into @Versions_Currenttable(ProjectId,proVersion,proStart,proEnd)
values(@ProjectId,@VersionNumber,@StatusSince,@NextStatusBy)
End
FETCH next from cur_titles INTO @ProjectId,@D_AutoID,@D_VersionCS,@VersionNumber,@StatusSince,@NextStatusBy
END
-- 关闭
close cur_titles
-- 释放
deallocate cur_titles
select
st.[Text] as ProjectName
,Ver.devVersion,convert(varchar(10),Ver.devStart,120) as devStart,convert(varchar(10),Ver.devEnd,120) as devEnd
,Ver.qaVersion,convert(varchar(10),Ver.qaStart,120) as qaStart,convert(varchar(10),Ver.qaEnd,120)as qaEnd
,Ver.proVersion,convert(varchar(10),Ver.proStart,120) as proStart,convert(varchar(10),Ver.proEnd,120)as proEnd
from @Versions_Currenttable as Ver
inner join s_Tree as st
on st.NodeID=Ver.ProjectId
where st.parentid in
(
select nodeid from s_tree where [Text]=@nodeText
)
--exec sp_GetAllProVersions
- SQL 游标使用的小例子,对于每行数据根据参数的不同进行Insert或Update操作.
- SQL使用游标遍历多层table获取每行的数据进行操作
- Oracle中用一条SQL语句直接进行Insert/Update的操作--merge into的使用
- 如何编写一条SQL实现根据某个字段的条件对某个字段进行不同的update操作
- 【SQL】使用游标进行不同数据库的…
- [SQL-码农]超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失
- 3.SQL Server DML触发器--检测对指定列的UPDATE或INSERT操作
- Merge into: Oracle中用一条SQL语句直接进行Insert/Update的操作
- 检查页面参数,根据返回类型不同进行不同的操作
- 游标的小例子
- 游标操作时进行Update应注意的一个问题
- sql server操作,使用insert进行批量数据操作
- SQL update已经存在的数据insert新的数据
- 掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete
- 掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete
- SQL四条最基本的数据操作语句:Insert,Select,Update和Delete
- 掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete
- SQL中游标使用的例子
- FC8 配置
- BIOS学习之网站与BLOG
- SQL 行列互换
- T-SQL单引号的使用方法
- ASP.NET 2.0 绑定高级技巧
- SQL 游标使用的小例子,对于每行数据根据参数的不同进行Insert或Update操作.
- 偷偷寫下幾筆
- hashtable hashmap Vector and list性能分析
- 在ASP.NET中动态创建柱状图和饼图
- ORA-1253: TNS : 操作超时的处理。
- 个性化分页
- SQL 嵌套多层查询
- NET2.0抓取网页全部链接
- JSP文档