找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1843|回复: 0
打印 上一主题 下一主题
收起左侧

MSSQL可编程函数

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-25 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       实习加上工作也有九个多月了,相对于在学校的两年半里这九个月相当的充实但似乎还缺少什么。在没有老师的摧残下我还能茁壮的成长。从2.20号正式入职后也从学生正式步入社会岗位,从当初的什么都不懂在逐渐的学习、沉淀下领悟了生存的本领。
        程序人生、一条在自己高中时代就埋下的种子开始发芽了。。。

        GoodLuck!!!

        MSSQL数据库在学校内老师曾给我们讲结果,但是那种到最后一节课才参透“数据库”是干什么用的人来说未免有些后知后觉。。。对于一个程序员来说过硬的编程基础敏捷的逻辑思维固然重要。但是最后承载记录这些结果与过程都需要一个载体,那他就是数据库,顾名思义数据库——“存储数据的仓库”。学生时代普遍的现象就是各种各样的老师在4个月的时间内给你“SET”一种技能,而学生只用假期一个月的时间就给“Release”掉了。。。
        我也一样、本来就不机灵再加记忆力。。。没办法自己重新找几本有营养的数看,本来我的习惯是只用数据库单纯的“增”、“删”、“改”、“查”,甚至于链表查询都能不用就不用。但是受到项目经理吴哥的启发,他说如果你让数据库替你处理一些简单的逻辑那你前台页面就剩下显示了。
        昨天查询需要自己编写了第一个可编程数据库函数,在吴哥指导下顺利完成、虽然比较简单,但是凡事都是由浅入深的吗、

SQL Server脚本源码:
 

USE [JinZhiSuLiao]
GO
/****** Object:  UserDefinedFunction [dbo].[udf_GetSalesTable]    Script Date: 11/29/2014 10:48:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[udf_GetSalesTable](@aPlanTranDate DATETIME,@aType int)
RETURNS 
@S_Tabel TABLE(
CustomerId VARCHAR(50), -- 客户Id
CustomerName VARCHAR(50), -- 客户名称
ProductId VARCHAR(50), -- 产品Id
ProductName VARCHAR(50), -- 产品名称
UnitPrice decimal(9,3) DEFAULT 0.00, -- 单价
SingleWeight decimal(9,3) DEFAULT 0.00, -- 单个重量
TransportId VARCHAR(50), -- 运输派车单详细Id
AllNumber decimal(9,3) DEFAULT 0.00, -- 总数量
Allprice decimal(9,3) DEFAULT 0.00, -- 总金额
AllWeight decimal(9,3) DEFAULT 0.00, -- 总重量
EndNumber decimal(9,3) DEFAULT 0.00 -- 客户结款的数量
)
AS
BEGIN

declare @dtMainTable table
(
cCTSC_ID varchar(50)
)
DECLARE @nMainCount INT -- 运输派车单主表个数
IF(@aType = 0)
BEGIN
insert into @dtMainTable 
SELECT CTSC_ID from CRM_TransportSendCar WHERE CONVERT(DATETIME,CTSC_Date,120) = CONVERT(DATETIME,@aPlanTranDate,120)  
END
ELSE IF(@aType = 1)
BEGIN
insert into @dtMainTable 
SELECT CTSC_ID from CRM_TransportSendCar WHERE Datepart(YEAR,CTSC_Date) = Datepart(YEAR,@aPlanTranDate)  AND Datepart(month,CTSC_Date) = Datepart(month,@aPlanTranDate) 
END
-- 定义一个游标
DECLARE @CTSC_ID VARCHAR(50)
DECLARE curMainId CURSOR FOR
SELECT cCTSC_ID FROM @dtMainTable
OPEN curMainId
FETCH NEXT FROM curMainId INTO @CTSC_ID
WHILE  @@FETCH_STATUS = 0
BEGIN
-- 创建临时变量
DECLARE @CustomerId VARCHAR(50) -- 客户Id
DECLARE @CustomerName VARCHAR(50) -- 客户名称
DECLARE @ProductId VARCHAR(50) -- 产品Id
DECLARE @ProductName VARCHAR(50) -- 产品名称
DECLARE @UnitPrice decimal(9,3) -- 单价
DECLARE @SingleWeight decimal(9,3) -- 单个重量
DECLARE @TransportId VARCHAR(50) -- 运输派车单详细Id
DECLARE @AllNumber decimal(9,3) -- 总数量
DECLARE @Allprice decimal(9,3) -- 总金额
DECLARE @AllWeight decimal(9,3) -- 总重量
DECLARE @EndNumber decimal(9,3) -- 客户结款的数量
-- 运输派车单子表查询、一个主表对应一种产品
SELECT DISTINCT @CustomerId=CTSCD_CustomerID,@ProductId=CTSCD_ProductID,@UnitPrice=@UnitPrice FROM CRM_TransportSendCarDetails WHERE CTSCD_OrderID = @CTSC_ID
SELECT @CustomerName=CMC_Name FROM CRM_Customers WHERE CMC_ID = @CustomerId
SELECT @ProductName=BP_Name,@SingleWeight=BP_weight FROM BOM_Products WHERE BP_ID = @ProductId
SET @TransportId = @CTSC_ID
SELECT @AllNumber=SUM(CTSCD_OutNumbers) FROM CRM_TransportSendCarDetails WHERE CTSCD_OrderID = @CTSC_ID
SET @Allprice = @AllNumber * @UnitPrice
SET @AllWeight = @AllNumber * @SingleWeight
-- 客户结余数量未填写、2014-11-28当前未涉及到财务所以无法赋值——By:CaiYong
INSERT INTO @S_Tabel(CustomerId,CustomerName,ProductId,ProductName,UnitPrice,SingleWeight,TransportId,AllNumber,Allprice,AllWeight,EndNumber)
VALUES(@CustomerId,@CustomerName,@ProductId,@ProductName,@UnitPrice,@SingleWeight,@TransportId,@AllNumber,@Allprice,@AllWeight,@EndNumber)
FETCH NEXT FROM curMainId INTO @CTSC_ID
END
CLOSE curMainId;
DEALLOCATE curMainId;

RETURN 
END
  
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表