通过临时表进行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. vmware 完全关闭时间同步

    参考 http://blog.51cto.com/hezhang/1535577 修改.vmx文件 tools.syncTime = "FALSE" time.synchroniz ...

  2. 【scrapy】其他问题

    今天看<python爬虫开发与项目实践>的17章写代码的时候发现,一个方法的结尾带了红色波浪线: def _process_booklist_item(self,item): ''' 处理 ...

  3. as2.0 清除主时间轴上所有的影片简介

    for (var i in _root) { if (typeof _root[i] == "movieclip") { _root[i].swapDepths(1); _root ...

  4. 2019年华南理工大学程序设计竞赛(春季赛)-H-Parco_Love_GCD

    题目链接:https://ac.nowcoder.com/acm/contest/625/H 题意:给定n个数(<=1e9)的序列,其中n<=5e5,求该序列所有子序列的对应的gcd对1e ...

  5. 第二章 向量(a)接口与实现

  6. while 解决 10000米绳子 对折当 绳长小于5米时求绳的对折次数

    public static void main(String args[]){ double length = 10000; int day = 0; while(day > 5){ lengt ...

  7. cisco 3850 GBIC报错处理

    今天有用户cisco 3850插入多模千兆光模块后报错日志如下: *Oct 18 13:48:54: %PLATFORM_PM-6-MODULE_ERRDISABLE:The inserted SFP ...

  8. http://ctf.bugku.com/challenges#Timer(%E9%98%BF%E9%87%8CCTF):Bugku——Timer(阿里CTF)

      做了第一个android apk逆向题,很多工具啥的还没用过,再接再厉.   找到方法发现这个apk支持的SDK API是15-17,于是就下载了API 16并制作了模拟器,但发现还是运行不起来, ...

  9. Codeforces Round #520 (Div. 2)

    Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...

  10. tcp/ip通信第5期之客户机端程序

    /*此程序是tcp/ip通信的客户机端程序, 测试运行在redhat6系统上 重构readline函数,解决粘包问题——利用“\n”识别一个消息边界 */ #include<stdio.h> ...