我也一樣、本來就不機(jī)靈再加記憶力。。。沒辦法自己重新找?guī)妆居袪I養(yǎng)的數(shù)看,本來我的習(xí)慣是只用數(shù)據(jù)庫單純的“增”、“刪”、“改”、“查”,甚至于鏈表查詢都能不用就不用。但是受到項目經(jīng)理吳哥的啟發(fā),他說如果你讓數(shù)據(jù)庫替你處理一些簡單的邏輯那你前臺頁面就剩下顯示了。
昨天查詢需要自己編寫了第一個可編程數(shù)據(jù)庫函數(shù),在吳哥指導(dǎo)下順利完成、雖然比較簡單,但是凡事都是由淺入深的嗎、
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), -- 產(chǎn)品Id
ProductName VARCHAR(50), -- 產(chǎn)品名稱
UnitPrice decimal(9,3) DEFAULT 0.00, -- 單價
SingleWeight decimal(9,3) DEFAULT 0.00, -- 單個重量
TransportId VARCHAR(50), -- 運(yùn)輸派車單詳細(xì)Id
AllNumber decimal(9,3) DEFAULT 0.00, -- 總數(shù)量
Allprice decimal(9,3) DEFAULT 0.00, -- 總金額
AllWeight decimal(9,3) DEFAULT 0.00, -- 總重量
EndNumber decimal(9,3) DEFAULT 0.00 -- 客戶結(jié)款的數(shù)量
)
AS
BEGIN
declare @dtMainTable table
(
cCTSC_ID varchar(50)
)
DECLARE @nMainCount INT -- 運(yùn)輸派車單主表個數(shù)
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
-- 定義一個游標(biāo)
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
-- 創(chuàng)建臨時變量
DECLARE @CustomerId VARCHAR(50) -- 客戶Id
DECLARE @CustomerName VARCHAR(50) -- 客戶名稱
DECLARE @ProductId VARCHAR(50) -- 產(chǎn)品Id
DECLARE @ProductName VARCHAR(50) -- 產(chǎn)品名稱
DECLARE @UnitPrice decimal(9,3) -- 單價
DECLARE @SingleWeight decimal(9,3) -- 單個重量
DECLARE @TransportId VARCHAR(50) -- 運(yùn)輸派車單詳細(xì)Id
DECLARE @AllNumber decimal(9,3) -- 總數(shù)量
DECLARE @Allprice decimal(9,3) -- 總金額
DECLARE @AllWeight decimal(9,3) -- 總重量
DECLARE @EndNumber decimal(9,3) -- 客戶結(jié)款的數(shù)量
-- 運(yùn)輸派車單子表查詢、一個主表對應(yīng)一種產(chǎn)品
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
-- 客戶結(jié)余數(shù)量未填寫、2014-11-28當(dāng)前未涉及到財務(wù)所以無法賦值——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