Sql Server2005对t-sql的增强之Cross Apply

Sql Server2005对t-sql的增强之Cross Apply
Cross Apply使表可以和表值函数结果进行join,在下面的示例中建了两个表和一个表值函数,T_b的列a_ids中会存放a表的id,分割的字符串连接;我们通过cross apply使T_aT_b表通过splitIDs inner join 连接。

请看示例:

GO

if object_id('T_a','U') is not null
drop table T_a
GO

CREATE TABLE T_a(

    id int unique not null,
    name varchar(50),
)
GO
if object_id('T_b',N'U') is not null
drop table T_b
GO
create table T_b
(
    id int unique not null,
    name varchar(10),
    a_ids varchar(100) null --要在这一列中存放t_a表的ID序列,这样做连第一范式都没有满足,但是有时候考虑性能或设计我们可能会像这么用
)
GO
--初始化数据

INSERT INTO T_a VALUES(1,'A-1')
INSERT INTO T_a VALUES(2,'A-2')
INSERT INTO T_a VALUES(3,'A-3')
INSERT INTO T_a VALUES(4,'A-4')
INSERT INTO T_a VALUES(5,'A-5')

INSERT INTO T_b VALUES(1,'B-1','1,2,4')
GO
--创建一个表值函数,用来拆分用逗号分割的数字串,返回只有一列数字的表
if object_id('splitIDs','TF') is not null
drop function splitIDs;
GO
create function splitIDs(
    @Ids nvarchar(1000)
)
returns @t_id TABLE (id bigint)
as
begin
    declare @i int,@j int,@l int,@v bigint;
    set @i = 0;
    set @j = 0;
    set @l = len(@Ids);
    while(@j < @l)
    begin
       set @j = charindex(',',@Ids,@i+1);
       if(@j = 0) set @j = @l+1;
       set @v = cast(SUBSTRING(@Ids,@i+1,@j-@i-1) as bigint);
       INSERT INTO @t_id VALUES(@v)
       set @i = @j;
    end
    return;
end
GO
--测试splitIDs的执行效果

select * from splitIDs('1,2,4,3')
select * from splitIDs('100')
select * from splitIDs(NULL)
GO
--使用cross apply获得t_b表中指定行对应的所有t_a表中的记录
select 
    aid = t_a.id
    ,aname = t_a.name
    ,bid = t_b.id
from t_b

cross apply splitIDs(a_ids) tbl_Ids
INNER JOIN t_a ON tbl_Ids .id = t_a.id
where t_b.id = 1

你明白cross apply的用法了吗?有问题欢迎讨论。

转载于:https://www.cnblogs.com/yanbinboy/archive/2008/04/30/1177811.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

360导航源码php,51zxw 仿360网址导航源码

1.上传网站安装程序到空间&#xff0c;空间需支持PHP&#xff0c;MYSQL数据库20M 即可。2.访问网网址执行安装&#xff0c;按照提示填入mysql数据库信息。3.安装时默认设置后台管理 用户&#xff1a;admin 密码&#xff1a;123456 (以防安装出错建议默认安装&#xff0c;然后登…

SRM 440(1-250pt, 1-500pt)

DIV1 250pt 题意&#xff1a;小球从一段折线斜坡上滚下来&#xff0c;告诉所用时间&#xff0c;求重力加速度。 解法&#xff1a;二分答案模拟即可。 tag:二分&#xff0c;simulation 1 // BEGIN CUT HERE2 /*3 * Author: plum rain4 * score :5 */6 /*7 8 */9 // END CUT…

技术 Leader 怎样带跨一个团队?

网上很多分析大公司&#xff0c;小公司的文章&#xff0c;都会提到在大公司工作就是螺丝钉&#xff0c;岗位分的非常细&#xff0c;每个人把自己的专职工作做好就行&#xff1b;而在小公司需要每个人都是多面手&#xff0c;一岗多职。这种观点我同意一半&#xff0c;在小公司中…

我怀疑全国最会吹牛的人,都在这8个公众号上了

全世界只有3.14 % 的人关注了青少年数学之旅学习如逆水行舟&#xff0c;不进则退&#xff1b;只有坚持不断的学习,才能保持进步。今天给大家精心挑选的这几个优质的公众号&#xff0c;在行业深耕已久&#xff0c;相信大家一定会有所收获&#xff0c;感兴趣的可以关注一下。Pyth…

信息化之路------广州行

刚刚参加完SAP在广州举办的“红海战略的成功之路”的主题演讲&#xff0c;同时也给SAP在广州的合作伙伴做了一次培训&#xff0c;在这次广州行的过程中&#xff0c;深深地感觉到“企业信息化广州还行”&#xff01; 这次广州之行体会颇深&#xff0c;主要有以下几点&#xff1a…

CSS hack:区分IE6 IE7 Firefox

区别不同浏览器&#xff0c;CSS hack写法&#xff1a;区别IE6与FF&#xff1a;background:orange;*background:blue;区别IE6与IE7&#xff1a;background:green !important;background:blue;区别IE7与FF&#xff1a;background:orange; *background:green;区别FF&#xff0c;IE…

win1编辑java环境,在win7下配置java编译环境

今天刚接触java编程&#xff0c;环境的配置方法比较复杂。好记性不如烂笔头&#xff0c;发个文章记录一下吧。win7系统 Jdk版本1.6用鼠标右击“我的电脑”->属性->高级->环境变量系统变量->新建->变量名&#xff1a;JAVA_HOME 变量值&#xff1a;D:Program File…

linux磁盘管理------LVM

一、需求分析1&#xff0c;当我们需要存储一个500G的不可分割文件时&#xff0c;但是我们设备上没有这么大的单个磁盘。2&#xff0c;当我们在搭建一个服务&#xff0c;由于日常运转产生大量文件&#xff0c;磁盘容量不够用了&#xff0c;怎么办&#xff1f;添加磁盘&#xff0…

在 .NET 中创建对象的几种方式的对比

在 .net 中&#xff0c;创建一个对象最简单的方法是直接使用 new (), 在实际的项目中&#xff0c;我们可能还会用到反射的方法来创建对象&#xff0c;如果你看过 Microsoft.Extensions.DependencyInjection 的源码&#xff0c;你会发现&#xff0c;为了保证在不同场景中的兼容性…

.NET设计模式(16):模版方法(Template Method)

摘要&#xff1a;Template Method模式是比较简单的设计模式之一&#xff0c;但它却是代码复用的一项基本的技术&#xff0c;在类库中尤其重要。主要内容1&#xff0e;概述2&#xff0e;Template Method解说3&#xff0e;.NET中的Template Method模式4&#xff0e;适用性及实现要…

数学界最恐怖的存在,学过数学的人,一辈子都不会忘记!

全世界只有3.14 % 的人关注了青少年数学之旅何谓数学&#xff1f;数学家Eduardo曾这样回答“数学是永恒&#xff0c;是真理&#xff0c;是一切的答案。”回首往昔数学始终伴随我们左右纵横交错的几何、繁琐复杂的运算难以求解的方程、无从下手的猜想......尽管在数学道路上有多…

把我的爱送给你――C#3.5(这题目似乎写错了)

本文发表于 中国IT实验室周报。这是我初次写给杂志社稿件&#xff0c;其中必有许多不足之处&#xff0c;还望大家见谅&#xff0c;虽然这篇文章质量可能不太高&#xff0c;但我希望能将个人的这些总结与大家分享。 从笔者接触编程至今&#xff0c;经历了数种编程语言&#xff0…

php左连接,如何在php中对左联接查询返回的数组数据进...

我有以下具有以下值的2表&#xff1a;tbl_brandID名称1个苹果2三星tbl_productsID brand_id p_name1个1移动2个1 Earpods3 2移动在这里,当我使用左联接查询即选择’b’.’id’作为’brand_id’,’b’.’name’作为’brand_name’,’p’.’p_name’作为’product_name’FROM’tb…

Blazor 数据绑定开发指南

翻译自 Waqas Anwar 2021年3月21日的文章 《A Developer’s Guide to Blazor Data Binding》 [1]现如今&#xff0c;大多数 Web 应用程序要么是在页面上显示某种数据&#xff0c;要么是使用表单从用户那里收集数据。这意味着每个 SPA 框架都必须支持数据绑定&#xff0c;以便开…

lr中winsock协议的脚本(转载51testing)

winsock协议代码Actions(){char acTest[100];char acTest2[100];char* pcTest3;//生成发送的串sprintf(acTest,"kkkhhhh\r\n";//指定发送的串lrs_set_send_buffer ("socket0", acTest, strlen(acTest));//发送&#xff0c;由于之前运行了lrs_set_send_buff…

葛优:你们有看过我的作品吗?| 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅

阳江海滩景色一瞥

前几天同学去阳江的海边玩了2天&#xff0c;海景相当不错&#xff0c;不敢独享&#xff0c;特来贴图。 转载于:https://www.cnblogs.com/absolute8511/archive/2008/05/24/1649638.html

php-fpm 超时,PHP超时的坑

结合去年国庆和过年期间平台碰到的一些问题&#xff0c;下面主要介绍的是PHP里面会涉及到的各种超时以及其中存在的坑。Nginx的超时配置fastcgi_connct_timeout 60Nginx和fastcgi进程建立连接的超时时间&#xff0c;默认60秒&#xff0c;如果超过了这个时间就断开连接。fastcgi…

琪琪格的私人日记!

琪琪格的私人日记&#xff01; 不要的就干脆放弃&#xff0c;不要再回头看往情留下的痕迹&#xff0c;自己终究要逃离这个圈&#xff0c;选择走自己该走的路&#xff0c;给他留下百分的祝福&#xff0c;已足够。拥有过爱情的人才知这份难舍的痛楚&#xff0c;为了自己爱的他而离…

使用表达式自定义Serilog输出格式

Serilog是.NET Core中常用的结构化日志类库&#xff0c;透过logging API可以轻松的记录应用程式中对象属性&#xff0c;方便快速进行logging内容进行查询与分析&#xff0c;并将其记录内容通过指定方式输出。今天&#xff0c;介绍一个Nuget包Serilog.Expressions&#xff0c;它…