一个跟同事闲谈写出来的SQL脚本_算法循环_关系循环
--下面是实现一个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脚本_算法循环_关系循环的更多相关文章
- 从一个简单的约束看规范性的SQL脚本对数据库运维的影响
之前提到了约束的一些特点,看起来也没什么大不了的问题,http://www.cnblogs.com/wy123/p/7350265.html以下以实际生产运维中遇到的一个问题来说明规范的重要性. 如下 ...
- 如何用SQL脚本在SQL Server Replication中创建合并复制,以及怎么创建分区合并复制
假设我们要创建合并复制的发布端数据库是EFDemo其中有四张表,订阅端数据库是EFDemoSubscription,如下图所示: 首先创建发布端快照代理Sql agent job:"EFDe ...
- 如何写复杂的SQL
经常有人问我那非常复杂的sql是怎么写出来的,我一直不知道该怎么回答. 因为虽然我写这样的sql很顺手,可是我却不知道怎么告诉别人怎么写. 很多人将这个问题归结为天赋,我却不这么看,我 ...
- 闲谈SQL脚本优化
摘要: 闲来无事,便想寻找大师级别优化SQL脚本案例,也算是读后留点笔记,摘录内容都会链接到所参考网址,如有冒犯,还望博主见谅:有些文章只有多动手多动脑才能理解其中的意思,看了需要实际操作,才不枉大师 ...
- 统计百分比的一个SQL脚本
统计一个表中一个百分比的SQL脚本,不过这个是个万分比,这个数据类型要调一调 ),) declare @num3 decimal,@num4 decimal declare @percent deci ...
- 如何写出高性能SQL语句
优化SQL查询:如何写出高性能SQL语句 1.首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果 ...
- MySQL写出高效SQL
mysql设计标准事务处理标准索引使用标准约束设计sql语句标准 怎么写出高效SQL清晰无误的了知业务需求满足业务需求,不做无用功知道表数据量和索引基本情况知道完成SQL需要扫描的数据量级SQL执行计 ...
- 怎么避免写出慢SQL
在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍.几十倍甚至几百倍. 怎样才能在开发阶段尽量避免写出慢 SQL 呢? 估算数据量 慢 SQL 对数据库的影响,是一个量变 ...
- CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写
Q: CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写 A: 建议统一写,CI框架会自动识别已经加载过的类,所以不用担心重复加载的问题 class C_User ...
- opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
随机推荐
- salesforce零基础学习(一百四十四)External Client App浅谈
本篇参考: https://help.salesforce.com/s/articleView?id=xcloud.external_integrations.htm&type=5 https ...
- cocoapods导入较大第三方库提示RPC failed
如题,今天我在cocoapods导入阿里云直播SDK的时候报错.报错信息如下 这个问题出现的原因就是:curl的postBuffer默认值太小,需要在终端重新配置这个值. 我也查看了网上的一些解决方法 ...
- 【iOS】从实际出发理解多线程(二)--NSThread基础操作
简介 NSthread是苹果官方提供面向对象操作线程的技术,简单方便,可以直接操作线程对象,不过需要自己控制线程的生命周期.在平时使用较少,常用的就是下面的方法来获取当前线程. [NSThread c ...
- iOS---学习研究大牛Git高星项目YYCategories(一)
转载请注明出处!!! 进行iOS开发已经很久了,但是一直没有静下心研究Git上一些大神写的优秀工程.现在下定决心开始从零开始,仔细研读并敲写一遍大神工程.首先我准备研究的是 ibireme 大神的Y ...
- [MCP][01]简介与概念
简介 MCP(全称为Model Context Protocol,模型上下文协议)是一种面向大模型交互过程的通用上下文协议标准.其核心目标在于为模型构建一个结构化.可控.可扩展的语义执行环境,使语言模 ...
- RAG is really dead? 大模型和知识之间的桥梁没了?
作者:SpaderMan 从 RAG 到上下文工程:理性思考 AI 应用开发,以交付业务结果为目标 最近,Latent Space 播客发布了一期标题为["RAG 已死,上下文工程为王&qu ...
- VU33P加速计算卡设计资料第613篇:基于VU33P的双路100G光纤网络加速计算卡
基于VU33P的双路100G光纤网络加速计算卡 基于Xilinx UltraScale+16 nm VU33P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 ...
- 由于空间满导致PostgreSQL数据库异常处理---惜分飞
朋友和我反馈pg库异常,通过查看日志确认最初故障是由于磁盘空间满,导出出现类似:无法扩展文件 "pg_tblspc/16394/PG_13_202007201/16395/5055912.1 ...
- 用了 Intellij idea 这些插件和高效配置后,写代码快得飞起来,再也不用 996 加班了
0. 背景 作为一个 Java 程序员,我相信,绝大多数同学日常都是用 idea 来写代码. Idea 作为宇宙第一 Java IDE,提供了丰富.强大的功能,可以让你写 Java 代码快得飞起来. ...
- 解决用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 ...