T-SQL 学习(一)
来源:互联网 发布:个人淘宝店要交税吗 编辑:程序博客网 时间:2024/05/16 10:37
月初修改一个SQL语句,确保接口传递的产品数据对应的种类都在相关店铺的种类表里。这里碰到了一个问题,数据库有两张关联表,[Product.Class]存储了系统中所有的产品种类,[Product.ShopClass]存储了店铺中所有的产品种类,但是存的却是种类名,而不是[Product.Class]的主键,后来又加了一列,需要填充对应的ClassID。前期设计不合理,不规范,后期后患无穷啊。
在这里记录一下实现的方式。
第一种使用公用表表达式CTE,这种方式简单明了,我很喜欢。
WITH T AS (SELECT a.ID,a.ClassID,b.ClassID AS ClassIDx FROM [Product.ShopClass] aLEFT JOIN [Product.Class] b ON b.ClassName = a.ClassName)UPDATE T SET ClassID = ClassIDx另附两种实现方式,主要是为了复习一下表变量和游标。
表变量
DECLARE @i int,@count int,@id int,@classId int;DECLARE @t TABLE (Num int,Id int,ClassId int)INSERT INTO @t SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID) AS Num,a.ID,b.ClassId FROM [Product.ShopClass] a LEFT JOIN [Product.Class] b ON b.ClassName = a.ClassName) AS tSET @i=0SELECT @count=count(*) FROM @tWHILE @i < @countBEGINSELECT @id=Id,@classId=ClassId FROM @t WHERE Num=@iUPDATE [Product.ShopClass] SET ClassId = @classId WHERE ID = @idSET @i = @i + 1END游标
DECLARE @id int,@name varchar(50)DECLARE C CURSOR FAST_FORWARD FOR SELECT a.ID,b.ClassId [Product.ShopClass] a LEFT JOIN [Product.Class] b ON b.ClassName = a.ClassNameOPEN CFETCH next FROM C INTO @id,@classIdWHILE @@FETCH_STATUS = 0BEGIN UPDATE [Product.ShopClass] SET ClassId = @classId WHERE ID = @id FETCH next FROM C INTO @id,@classIdEND CLOSE CDEALLOCATE C
- T-SQL 学习(一)
- T-SQL的学习总结一
- SQL Server 2005学习之T-SQL数据库设计一
- sql server 的T-SQL 学习笔记(一)
- T-SQL (一)
- T-SQL(一)
- T-SQL 学习
- T-SQL学习笔记
- T-SQL学习
- T-SQL 学习笔记
- T-SQL学习
- T SQl学习笔记
- T-SQL学习笔记
- T-SQL递归学习
- T-SQL学习笔记
- T-SQL 学习笔记
- t-sql学习
- DVB-T学习(一)
- ubuntu 10.04安装qtcreator并汉化
- apache在windows下的调优
- 自己动手做计算机-计算机科学的本质
- boost库在工作(17)线程之二
- ant 脚本编译基础知识
- T-SQL 学习(一)
- iOS平台UDID方案比较
- log4net 日志 插入mysql
- Poj 2513 Colored Sticks//Trie+并查集+欧拉通路
- 会话管理
- sqlserver 2005 维护计划备份数据库
- boost库在工作(18)线程之三
- 说说最近的SEO:SEO已变革 将走进新时代
- mysql存储过程详细教程