我也一樣、本來就不機靈再加記憶力。。。沒辦法自己重新找幾本有營養的數看,本來我的習慣是只用數據庫單純的“增”、“刪”、“改”、“查”,甚至于鏈表查詢都能不用就不用。但是受到項目經理吳哥的啟發,他說如果你讓數據庫替你處理一些簡單的邏輯那你前臺頁面就剩下顯示了。
昨天查詢需要自己編寫了第一個可編程數據庫函數,在吳哥指導下順利完成、雖然比較簡單,但是凡事都是由淺入深的嗎、
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