--下面是实现一个99乘法表的脚本,第一种方法很常规,第二种方法我想了一个多小时,开始绕在Cross Apply连接这个功能上。

--我没打算用多重循环,但是感觉如果单靠两个表相连,另外一个表的数据又要根据前一个表的对应记录该表where条件,就必须用Cross Apply

--这是受蔡志辉的Sql CLR函数影响,那个函数是拆串成表的,其实没必要写得那么麻烦。

IF EXISTS(SELECT 1 FROM sysobjects WHERE name='P_9x9' AND xtype='P')
DROP PROCEDURE P_9x9
GO

--exec P_9x9 9
CREATE PROCEDURE P_9x9 (@n INT)
AS
DECLARE @i INT,@j INT,@s nvarchar(500)
CREATE TABLE #temp(sDiscription NVARCHAR(500), iOrderNo INT)
SET @i=1

WHILE @i<=@n
BEGIN
    SET @s=''
    SET @j=1
 WHILE @j<=@i
 BEGIN
     SET @s=@s+LTRIM(@j)+'*'+LTRIM(@i)+'='+LTRIM(@j*@i)+'   '
  SET @j=@j+1
 END
    INSERT #temp(sDiscription) VALUES(@s)
 SET @i=@i+1
END

SELECT sDiscription FROM #temp
DELETE #temp

--第二种写法
SET @i=1
WHILE @i<=@n
BEGIN
  INSERT #temp(iOrderNo)
  VALUES  (@i)
  SET @i=@i+1
END

/*
UPDATE A SET
     sDiscription=C.S
FROM #temp A CROSS APPLY  
     (SELECT iOrderNo,
          S=(SELECT LTRIM(D.iOrderNo)+'*'+LTRIM(A.iOrderNo)+'='+LTRIM(D.iOrderNo*A.iOrderNo)+'   '
        FROM #temp D WHERE D.iOrderNo<=A.iOrderNo FOR XML PATH ('')  )
  FROM #temp B
  WHERE A.iOrderNo>=B.iOrderNo
     ) C
*/

UPDATE A SET
     sDiscription=(SELECT LTRIM(D.iOrderNo)+'*'+LTRIM(A.iOrderNo)+'='+LTRIM(D.iOrderNo*A.iOrderNo)+'   '
        FROM #temp D WHERE D.iOrderNo<=A.iOrderNo FOR XML PATH ('')  )
FROM #temp A

SELECT sDiscription FROM #temp

下面我再写个DELPHI版本的,Delphi写法就比较固定,由此可以看出SQL在多记录处理上,由于其自身系统的循环设计,还是很有优势的。

var  //se1是TSpinEdit; mmo1是TMemo;
  i,j,k: Integer;
  s : string;
begin
    k := se1.Value;
    for i := 1 to k do
    begin
        s := '';
        for j:= 1 to i do
        begin
           s :=s+ IntToStr(j)+'*'+inttostr(i)+'='+inttostr(i*j)+'   ';
        end;
        mmo1.Lines.Append(s);
    end;
end;

一个跟同事闲谈写出来的SQL脚本_算法循环_关系循环的更多相关文章

  1. 从一个简单的约束看规范性的SQL脚本对数据库运维的影响

    之前提到了约束的一些特点,看起来也没什么大不了的问题,http://www.cnblogs.com/wy123/p/7350265.html以下以实际生产运维中遇到的一个问题来说明规范的重要性. 如下 ...

  2. 如何用SQL脚本在SQL Server Replication中创建合并复制,以及怎么创建分区合并复制

    假设我们要创建合并复制的发布端数据库是EFDemo其中有四张表,订阅端数据库是EFDemoSubscription,如下图所示: 首先创建发布端快照代理Sql agent job:"EFDe ...

  3. 如何写复杂的SQL

    经常有人问我那非常复杂的sql是怎么写出来的,我一直不知道该怎么回答.         因为虽然我写这样的sql很顺手,可是我却不知道怎么告诉别人怎么写. 很多人将这个问题归结为天赋,我却不这么看,我 ...

  4. 闲谈SQL脚本优化

    摘要: 闲来无事,便想寻找大师级别优化SQL脚本案例,也算是读后留点笔记,摘录内容都会链接到所参考网址,如有冒犯,还望博主见谅:有些文章只有多动手多动脑才能理解其中的意思,看了需要实际操作,才不枉大师 ...

  5. 统计百分比的一个SQL脚本

    统计一个表中一个百分比的SQL脚本,不过这个是个万分比,这个数据类型要调一调 ),) declare @num3 decimal,@num4 decimal declare @percent deci ...

  6. 如何写出高性能SQL语句

    优化SQL查询:如何写出高性能SQL语句 1.首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果 ...

  7. MySQL写出高效SQL

    mysql设计标准事务处理标准索引使用标准约束设计sql语句标准 怎么写出高效SQL清晰无误的了知业务需求满足业务需求,不做无用功知道表数据量和索引基本情况知道完成SQL需要扫描的数据量级SQL执行计 ...

  8. 怎么避免写出慢SQL

    在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍.几十倍甚至几百倍. 怎样才能在开发阶段尽量避免写出慢 SQL 呢? 估算数据量 慢 SQL 对数据库的影响,是一个量变 ...

  9. CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写

    Q: CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写 A: 建议统一写,CI框架会自动识别已经加载过的类,所以不用担心重复加载的问题 class C_User ...

  10. opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用

    opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用

随机推荐

  1. salesforce零基础学习(一百四十四)External Client App浅谈

    本篇参考: https://help.salesforce.com/s/articleView?id=xcloud.external_integrations.htm&type=5 https ...

  2. cocoapods导入较大第三方库提示RPC failed

    如题,今天我在cocoapods导入阿里云直播SDK的时候报错.报错信息如下 这个问题出现的原因就是:curl的postBuffer默认值太小,需要在终端重新配置这个值. 我也查看了网上的一些解决方法 ...

  3. 【iOS】从实际出发理解多线程(二)--NSThread基础操作

    简介 NSthread是苹果官方提供面向对象操作线程的技术,简单方便,可以直接操作线程对象,不过需要自己控制线程的生命周期.在平时使用较少,常用的就是下面的方法来获取当前线程. [NSThread c ...

  4. iOS---学习研究大牛Git高星项目YYCategories(一)

    转载请注明出处!!!  进行iOS开发已经很久了,但是一直没有静下心研究Git上一些大神写的优秀工程.现在下定决心开始从零开始,仔细研读并敲写一遍大神工程.首先我准备研究的是 ibireme 大神的Y ...

  5. [MCP][01]简介与概念

    简介 MCP(全称为Model Context Protocol,模型上下文协议)是一种面向大模型交互过程的通用上下文协议标准.其核心目标在于为模型构建一个结构化.可控.可扩展的语义执行环境,使语言模 ...

  6. RAG is really dead? 大模型和知识之间的桥梁没了?

    作者:SpaderMan 从 RAG 到上下文工程:理性思考 AI 应用开发,以交付业务结果为目标 最近,Latent Space 播客发布了一期标题为["RAG 已死,上下文工程为王&qu ...

  7. VU33P加速计算卡设计资料第613篇:基于VU33P的双路100G光纤网络加速计算卡

    基于VU33P的双路100G光纤网络加速计算卡 基于Xilinx UltraScale+16 nm VU33P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 ...

  8. 由于空间满导致PostgreSQL数据库异常处理---惜分飞

    朋友和我反馈pg库异常,通过查看日志确认最初故障是由于磁盘空间满,导出出现类似:无法扩展文件 "pg_tblspc/16394/PG_13_202007201/16395/5055912.1 ...

  9. 用了 Intellij idea 这些插件和高效配置后,写代码快得飞起来,再也不用 996 加班了

    0. 背景 作为一个 Java 程序员,我相信,绝大多数同学日常都是用 idea 来写代码. Idea 作为宇宙第一 Java IDE,提供了丰富.强大的功能,可以让你写 Java 代码快得飞起来. ...

  10. 解决用electron打包Vue工程(Vite)报错electron : Failed to load URL : xxx... with error : ERR _CONNECTION_REFUSED

    解决用electron打包Vue工程(Vite)报错electron : Failed to load URL : xxx... with error : ERR _CONNECTION_REFUSE ...