1. 程式人生 > >sqlserver 自定義、刪除、執行 函式和儲存過程

sqlserver 自定義、刪除、執行 函式和儲存過程

自定義儲存過程:

if (object_id('p_wm_get_dynstore', 'P') is not null)
    drop proc p_wm_get_dynstore
go
create procedure p_wm_get_dynstore(
	@stock_id int =0,
    @useful_date int =0,
    @i_state int =0,
    @q_state int =0,
    @is_batch bit = 0,
    @product_code varchar(250) =''
)

-- =============================================
-- Author:		XXX
-- Create date: 2016-02-18
-- Description:	XXXXXXX
-- =============================================
as
begin
	declare @ifstr varchar(2000) = ''
	declare @newifstr varchar(2000)
	declare @pro_id int
	declare @sqlstr varchar(2000)
	
	if @stock_id =0 or @stock_id is null 
		RaisError('傳入引數錯誤:stock_id必填',16,1)
	if @useful_date <> 0 and @useful_date is not null 
		Set @ifstr = @ifstr + ' and DATEDIFF(day, makedate, getdate()) <=' + str(@useful_date) 
	if @i_state <> 0 and @i_state is not null  
		Set @ifstr = @ifstr + 'and v_inventorystate_id=' + str(@i_state) 
	if @q_state <> 0 and @q_state is not null  
		Set @ifstr = @ifstr + ' and v_qualitystate_id=' + str(@q_state)
	if ISNULL( @product_code,'') != ''
		Set @pro_id = (SELECT a.id  FROM bs_product a WHERE 
[email protected]
_code) if @pro_id <> 0 and @pro_id is not null Set @ifstr = @ifstr + ' and product_id=' + str(@pro_id) if ISNULL( @ifstr,'') != '' Set @newifstr = 'stock_location_id in (SELECT lot_stock_id FROM bs_stock_warehouse WHERE id=' + str(@stock_id) + ')'+ @ifstr else Set @newifstr = 'stock_location_id in (SELECT lot_stock_id FROM bs_stock_warehouse WHERE id='+ str(@stock_id) + ')' if @is_batch <> 0 and @is_batch is not null Set @sqlstr = 'select p.name_template,p.default_code,p.specs,u.name,d.qty,d.lockqty,(d.qty-d.lockqty)as useqty,l.name as ''庫位'' ,w.name as w_name,b.name as b_name,c.name as c_name from ( SELECT SUM(qty) as qty,SUM(lockqty) as lockqty,SUM(useableqty) as useableqty,product_id,stock_location_id,v_qualitystate_id,v_inventorystate_id,uom_id FROM wm_dynstore WHERE '+ @newifstr +' GROUP BY product_id,stock_location_id,v_qualitystate_id,v_inventorystate_id,uom_id )as d left join bs_product p on p.id = d.product_id left join bs_product_uom u on u.id = d.uom_id left join bs_stock_location l on l.id = d.stock_location_id left join bs_stock_warehouse w on w.id = l.stock_warehouse_id left join bs_publictype_d b on b.id = d.v_inventorystate_id left join bs_publictype_d c on c.id = d.v_qualitystate_id' else Set @sqlstr = 'select p.name_template,p.default_code ,p.specs ,u.name ,d.qty ,d.lockqty,(d.qty-d.lockqty) as useqty,l.name as ''庫位'' ,w.name as w_name,b.name as b_name,c.name as c_name from ( SELECT qty,lockqty,useableqty,product_id,stock_location_id,v_qualitystate_id,v_inventorystate_id FROM wm_dynstore WHERE '+ @newifstr +' )as d left join bs_product p on p.id = d.product_id left join bs_product_uom u on u.id = d.uom_id left join bs_stock_location l on l.id = d.stock_location_id left join bs_stock_warehouse w on w.id = l.stock_warehouse_id left join bs_publictype_d b on b.id = d.v_inventorystate_id left join bs_publictype_d c on c.id = d.v_qualitystate_id;' print '123' print @sqlstr end Execute(@sqlstr) go exec p_wm_get_dynstore 5621,0,0,0,1; exec p_wm_get_dynstore 5621,5,0,0,1,'2.40010';


自定義函式:

---------------------------------------查詢截止日期的入庫數量-----------------------------------
if OBJECT_ID('f_wm_get_stockin','if')is not null
	drop function f_wm_get_stockin
go
-------- =============================================
-------- Author:		XXX
-------- Create date: 2016-03-03
-------- Description:	XXXXXXXXXXXXXXXXX
-------- =============================================
create function f_wm_get_stockin(
	@stock_id int,
	@company_id int, 
	@begindate varchar(200),
	@enddate varchar(200),
	@product_code varchar(200),
	@stock_state varchar(250), 
	@quality_state varchar(250)
)
returns table
as 
return (
	SELECT d.res_company_id,d.stock_warehouse_id,d.product_id,
	SUM(s.qty) as qty, SUM(s.qty*p.often_switch) as qty_often,SUM(s.qty*d.price_unit) as amount, 
	SUM(s.qty*d.price_unit)/SUM(s.qty) as price_unit,SUM(s.qty*d.price_unit)/SUM(s.qty*p.often_switch) as price_often
	FROM wm_dynstore d
	LEFT JOIN wm_storemv s ON s.mgin_id = d.id
	LEFT JOIN bs_product p on p.id = d.product_id
	WHERE (@company_id <= 0  or 
[email protected]
_id) and (@stock_id <= 0 or [email protected]_id) and (@product_code is null or p.default_code in (@product_code)) and (@stock_state is null or d.v_inventorystate_id in (@stock_state)) and (@quality_state is null or d.v_qualitystate_id in (@quality_state)) AND s.wtime_d >= @begindate AND s.wtime_d <= @enddate GROUP BY d.res_company_id,d.stock_warehouse_id,d.product_id ) go select * from f_wm_get_stockin(8,1,'2015-12-01','2015-12-31','','','');


相關推薦

sqlserver 定義刪除執行 函式儲存過程

自定義儲存過程: if (object_id('p_wm_get_dynstore', 'P') is not null) drop proc p_wm_get_dynstore go create procedure p_wm_get_dynstore( @s

學會使用MySQL中定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

mybaits(查詢與別名日誌框架顯示sql語句物件屬性資料庫表字段不匹配resultMap使用mysql資料查詢分頁執行sql儲存過程動態SQL語句)

主要是各種配置檔案,建議把整個專案搬到自己電腦上慢慢看。 建立maven專案 首先是各種配置檔案: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

MySQL定義函式儲存過程的區別:

  自定義函式和儲存過程的區別: 1)一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。儲存過程,功能強大,可以執行包括修改表等一系列資料庫操作;使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。 2)對於儲存過程來說可以返回引數,如記錄集,而函式只能返回值或者表物件。函式只能

MySQL利用定義函式儲存過程建立海量表,並使用索引優化

昨天學習韓順平老師的視訊時明白了上一章explain的意義,為了自己的聯絡,我學著建立了一個海量表,供自己練習使用。 程式碼如下: #建立表DEPT CREATE TABLE dept( /*部門表*/ deptno MEDIUMINT UN

資料庫系統學習筆記--函式儲存過程

目錄   函式 自定義函式 基本語法 控制語句 儲存過程 自定義函式和儲存過程的區別 函式 函式的意義就在於完成特定的功能,寫一份函式,可以在多個語句中多次使用,簡化程式設計工作。 資料庫系統中的函式大致也可以分為內建函式和自定義函式(UDF

資料庫中函式儲存過程的區別總結

資料庫的使用中,經常用到函式和儲存過程。都是為了實現某個sql功能,那麼這兩者有區別嗎?都適用哪些場景?總結如下 總的來說函式限制比較多,如不能用臨時表,只能用表變數等,而儲存過程的限制相對就比較少。 1.儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比

Oracle 函式儲存過程的區別聯絡 總結版

  oracle儲存過程與函式的區別 2017年08月15日 22:49:38 冷月葬花魂iiii 閱讀數:7800更多 個人分類: oracle 定義: 儲存過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集

mysql無法匯入函式儲存過程解決方法

mysql 建立函式時出現 Error Code : 1418 錯誤解決辦法2008-08-19 17:08Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL

PLSQL匯出函式儲存過程

 set echo off set heading off set feedback off  spool d:\proc.sql select text from dba_source where owner='IOM_DF' and type='PROCEDURE'; spool off 1.注意ow

資料庫函式儲存過程例子

create or replace procedure ADD_CYBH(ghbh IN VARCHAR2,num IN INTEGER,flag OUT INTEGER) AS --增加取樣編號介面(CZY目錄下AddCybh.mxml) 輸入:ghbh過衡編號,n

mysql 中函式儲存過程的區別聯絡

怎麼查詢,怎樣寫sql在sql 語句中判斷不能用 == ,要用  =  就行了 ,賦值 用 := 函式  和 儲存過程的相同點 和不同點:函式的建立:函式只能在指定資料庫中用。 和儲存方法一樣delimiter $$create function 函式名稱(引數列表) ret

mysql函式儲存過程

mysql儲存過程是幹嘛的?函式又是幹嘛的? 忽然想解釋著兩個問題也有點頭大。不過想想也簡單。 剩下的事白話胡扯的,聽聽就行了不要當著,如果有什麼不合適的,或者是誤人子弟的請留言評論。馬上更正 首先我們說儲存過程是幹嘛的,為嘛要用儲存過程 如果沒學過程式語言java或C++

ORACLE建立包包體及包中函式儲存過程

背景:在Oracle資料庫建立包,在包建立函式Function和儲存過程Procedure。在java專案中呼叫。 建立包,並在下面宣告包含的函式和儲存過程: create or replace p

函式儲存過程的區別

今天中午扯淡的時候,同事扯到了 Function 和 Stored Procedure 的區別。後來我又度娘了一把,發現那些個答案有些坑爹,故此Mark一把。 1. Function 執行完成之後一定會結果返回,而且僅有一個返回值;Stored Procedure 既

JDBC-MYSQL-儲存函式儲存過程的呼叫

最近要學習資料庫,在用JDBC呼叫儲存過程和儲存函式是出現了小麻煩。在MYSQL中,用JDBC呼叫儲存過程和儲存函式還是有一些不同的。  一,用JDBC呼叫儲存過程一般過程如下: String sql = "call proc(?,?)"; CallableSt

WPF 定義OA現金盤平臺出租表格(可添加刪除合並拆分)

oar each dev col pri true ext bject http xaml代碼OA現金盤平臺出租QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com <Windowxmlns="http:/

SQL Server——保證資料的完整性(使用者定義資料型別使用規則解除刪除規則)

目錄   一、使用者自定義資料型別 二、使用規則 規則和CHECK約束的比較: 三、解除和刪除規則 一、使用者自定義資料型別 使用者自己設計並實現的資料型別就是使用者自定義資料型別。舉例:當幾個表中要存同種資料型別時,並且保證他們有相同的資料型別、長度和

微信公眾號開發整理(七)--定義選單查詢刪除

1.查詢選單:get請求方式2.在工具類中新增訪問get請求常量URL建立查詢選單方法:public static int createMenu(String token,String menu) throws ParseException, IOException{int

SQl中的UDF(使用者定義函式)與儲存過程的區別優點

UDF定義: 和儲存過程很類似,使用者自定義函式是一組有序的T_SQL語句,這些語句被預先優化和編譯,並且可以作為一個單元來進行呼叫。UDF和儲存過程的主要區別在於結果的返回方式。為了能支援多種的不同的返回值,UDF比儲存過程有更多的限制。 UDF和儲存過程的具體區別: 儲