通过临时表进行sql循环

-----------创建临时表--------------

SELECT * INTO #tempfensitocity
FROM(

SELECT * FROM dbo.Swb_Jc_FenGongSi fs WHERE
NOT EXISTS
(
SELECT * FROM dbo.Swb_Jc_FenGongSi AS A INNER JOIN dbo.Swb_Electronic_City AS B
ON A.FenGongSiID=B.FengGongSiID WHERE fs.FenGongSiID=B.FengGongSiID

)
) AS A

DECLARE @fengongsiid INT
DECLARE @chengshiid INT
DECLARE @parentid INT
DECLARE @iscity int
DECLARE @isjoin INT
DECLARE @cityid INT
DECLARE @cityname VARCHAR(100)

BEGIN TRANSACTION
BEGIN TRY
---循环插入----

WHILE EXISTS (SELECT 1 FROM #tempfensitocity)
BEGIN
set @parentid =NULL
SET @cityid=null
------拿到一条分公司id-------
SELECT TOP 1 @fengongsiid=FenGongSiID,@cityname=GongSiMingCheng,@iscity= CASE when IsCity=1 THEN 1 ELSE

0 end,@isjoin=IsJoin FROM #tempfensitocity
--------取得对应的@parentid-----------------
SELECT @parentid=A.FenGongSiID FROM dbo.Swb_Jc_FenGongSi AS A WHERE EXISTS
(
SELECT 1 FROM dbo.Swb_Jc_FenGongSi AS B WHERE B.FenGongSiID=@fengongsiid AND

B.NewCityName=A.GongSiMingCheng
)

---------取得cityid--------------------
IF(@parentid IS null)
SELECT @cityid= MAX(CityID)+1 FROM Swb_Electronic_City
ELSE
SELECT @cityid=CityID FROM Swb_Electronic_City WHERE FengGongSiID=@parentid

IF(@cityid IS null)
SELECT @cityid= MAX(CityID)+1 FROM Swb_Electronic_City

---------取得城市id------------
SELECT @chengshiid= MAX(ChengShiID)+1 FROM Swb_Electronic_City

INSERT INTO dbo.Swb_Electronic_City(
ChengShiID,CityName,FengGongSiID,CityID,ParentID,IsCity,IsJoin,IsEnable
,ExtendType,CreatDate)
VALUES
(
@chengshiid,@cityname,@fengongsiid,@cityid,@parentid,@iscity,@isjoin,NULL,1,GETDATE()

)

DELETE #tempfensitocity WHERE FenGongSiID=@fengongsiid
END

END TRY
BEGIN CATCH
if(@@trancount>0)

ROLLBACK TRANSACTION

END CATCH
if(@@trancount>0)
COMMIT

-----删除临时表--------
DROP TABLE #tempfensitocity

END

sqlserver sql 循环的更多相关文章

  1. Sqlserver Sql Agent Job 只能同时有一个实例运行

    Sqlserver Sql Agent中的Job默认情况下只能有一个实例在运行,也就是说假如你的Sql Agent里面有一个正在运行的Job叫"Test Job",如果你现在再去启 ...

  2. SQL循环语句 详解

    SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+ ...

  3. sql 循环 ,随机数,循环插入一年数据

    --循环插入一年的时间 DROP TABLE #temp CREATE TABLE #temp (date DATETIME); DECLARE @year INT ; WITH a1 AS ( SE ...

  4. PL/SQL 循环语句

    1.基本 LOOP 循环语句 语法: LOOP 语句序列; END LOOP; 其中,语句序列中需要一个EXIT语句或一个EXIT WHEN语句来中断循环. 实例: DECLARE x ) :; BE ...

  5. SQLSERVER SQL性能优化技巧

    这篇文章主要介绍了SQLSERVER SQL性能优化技巧,需要的朋友可以参考下 1.选择最有效率的表名顺序(只在基于规则的优化器中有效)       SQLSERVER的解析器按照从右到左的顺序处理F ...

  6. 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)

    原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...

  7. ql/sql 循环语句、异常处理、事务处理!

    一.ql sql 循环语句? /*1.loop循环 语法: 声明循环变量 loop 判断循环条件 ,如果循环条件不成立,跳出循if 条件表达式 then exit; end if; 语句块; 改变循环 ...

  8. PL/SQL循环

    1.if循环做判断 SET SERVEROUTPUT ON accept num prompt 'qinshuu'; DECLARE pnum NUMBER :=& num ; BEGIN T ...

  9. SQL 循环语句 while 介绍 实例

    declare @i int begin insert into test (userid) values(@i) end --------------- while 条件 begin 执行操作 en ...

随机推荐

  1. fiddler常用操作之断点

    fiddler常用操作断点 标签(空格分隔): fiddler断点 一.断点: 1.为什么要打断点呢? 比如一个购买的金额输入框,输入框前端做了限制100-1000,那么我们测试的时候,需要测试小于1 ...

  2. C/C++中#pragma once的使用

    在C/C++中,为了避免同一个文件被include多次,有两种方式:一种是#ifndef方式,一种是#pragma once方式(在头文件的最开始加入). #ifndef SOME_UNIQUE_NA ...

  3. vim常用命令之多行注释和多行删除

    vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率.   1.多行注释:   1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;   ...

  4. CentOS Find命令

    find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进 ...

  5. linux之基本命令讲解

    前言 [root@localhost python]# vim /root/.bashrc export PS1='\[\e[32;1m\][\u@\h \w \t]#\[\e[0m\] source ...

  6. Appium+python自动化1-环境搭建

    一.前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+ ...

  7. 牛客网 Wannafly挑战赛12 删除子串(线性dp)

    题目描述 给你一个长度为n且由a和b组成的字符串,你可以删除其中任意的部分(可以不删),使得删除后的子串“变化”次数小于等于m次且最长. 变化:如果a[i]!=a[i+1]则为一次变化.(且新的字符串 ...

  8. 《基于Nginx的中间件架构》学习笔记---3.nginx的目录分析

    一.目录分析 用yum的方式进行安装实质上装的都是一个个的rpm包,对于linux系统rpm包管理器,我们使用命令rpm -ql  服务名称 就可以列出我们已经安装的服务所对应安装的每一个文件所在的目 ...

  9. Java_9 面向对象

    1.面向对象思想 面向过程的思想:自己做什么 面向对象的思想:自己找谁做,即不断地创造对象.使用对象.指挥对象做事情.万物皆对象. 面对对象的特征:封装.继承.多态. 2.java中基本单元类 成员变 ...

  10. jquery滚动事件

    滚动到一定高度: $(window).scroll(function(){ var scrollTop = $(document).scrollTop(); && scrollTop ...