1. 程式人生 > >SQLserver 在儲存過程中建立函式,建立檢視

SQLserver 在儲存過程中建立函式,建立檢視

alter PROCEDURE usp_sumgoods(@supplierid VARCHAR(50)) as
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetMain]') and xtype in (N'FN', N'IF', N'TF')) 
-- 刪除函式 
	drop function [dbo].[GetMain] 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sumgoods]') and OBJECTPROPERTY(id, N'IsView') = 1) 
	drop view [dbo].[sumgoods] 
DECLARE @sql VARCHAR(MAX)
SET @sql = 'CREATE view [dbo].[sumgoods]
with schemabinding
as
(
select id,mainid,goodsNo,(select modal from dbo.bas_goods where goodsno = a.goodsNo) as modal,goodscnname,color,
(select cnname from dbo.bas_qtyunit where id=qtyunit) as qtyunit,swareqty,thispurchaseqty,Inqty,backqty,
(inqty-backqty) as realInqty,waitOutqty,freezeqty,safeqty from 
(select id,mainid,goodsNo,cnname as  goodscnname,color,qtyunit,
case when goodstype=1 then
isnull((select isnull(balanceqty,0) from dbo.bas_goods_center where warehouseid=2 and style=1 and goodsid=a.goodsid),0)
when goodstype=2 then
isnull((select isnull(balanceqty,0) from dbo.M_property_warehouse where warehouseid=1 and style=1 and wid=a.goodsid),0)
end  as swareqty,  thispurchaseqty,
isnull((select SUM(m.instockqty) from dbo.wm_stock_goods m where m.purchasegoodsid =a.id and instocktype<17),0) as inqty,
isnull((select sum(outstockqty)  from dbo.wm_stock_goods_out m where purchasecontractgoodsid=a.id and outtype=4 and m.printId=a.printid),0)  as backqty,
case when goodstype=2 then isnull(dbo.Get_material_needqty(a.goodsid,1,1),0) 
when goodstype=1 then isnull(dbo.Get_material_needqty(a.goodsid,2,1),0) end 
as waitOutqty,
(case when goodstype=1 then (select freezeqty from dbo.bas_goods_center where style=1 and warehouseid=1 and goodsid=a.goodsid)
when goodstype=2 then (select freezeqty from dbo.M_property_warehouse where style=1 and warehouseid=1 and wid=a.goodsid) end) as freezeqty,
isnull((case when goodstype=1 then (select isnull(safeqty,0) from dbo.bas_goods where id=a.goodsid)  
when goodstype=2 then  (select isnull(savesafeqty,0) from dbo.M_property where id=a.goodsid) end ),0) as safeqty 
from dbo.purchase_contract_goods a where mainid in 
(select id from dbo.purchase_contract 
where (type=1 or type=2 or type=11 or type=12 or type=13 or type=14) and   status=8 and instockstatus<4 and  supplierid = '
[email protected]
+')) a where (inqty-backqty)<thispurchaseqty )' EXEC(@sql) DECLARE @sql1 VARCHAR(MAX) SET @sql1 = ' CREATE FUNCTION [dbo].[GetMain](@goodsno varchar(50)) RETURNS varchar(max) with schemabinding AS BEGIN DECLARE @values varchar(max) SELECT @values = Isnull(@values + '';'', '''') + cast(mainid as varchar(50)) FROM dbo.sumgoods WHERE
[email protected]
RETURN @values END' EXEC(@sql1) select goodsMain,goodsNo,(select modal from dbo.bas_goods where goodsno = x.goodsNo) as modal,goodscnname,color,qtyunit,swareqty,SUM(thispurchaseqty) thispurchaseqty,SUM(inqty) inqty,SUM(backqty) backqty,SUM(realInqty) realInqty,waitOutqty,freezeqty,safeqty from ( select id,mainid,goodsNo,dbo.GetMain(goodsNo) goodsMain,(select modal from dbo.bas_goods where goodsno = a.goodsNo) as modal,goodscnname,color, (select cnname from dbo.bas_qtyunit where id=qtyunit) as qtyunit,swareqty,thispurchaseqty,Inqty,backqty, (inqty-backqty) as realInqty,waitOutqty,freezeqty,safeqty from (select id,mainid,goodsNo,cnname as goodscnname,color,qtyunit, case when goodstype=1 then isnull((select isnull(balanceqty,0) from dbo.bas_goods_center where warehouseid=2 and style=1 and goodsid=a.goodsid),0) when goodstype=2 then isnull((select isnull(balanceqty,0) from dbo.M_property_warehouse where warehouseid=1 and style=1 and wid=a.goodsid),0) end as swareqty, thispurchaseqty, isnull((select SUM(m.instockqty) from dbo.wm_stock_goods m where m.purchasegoodsid =a.id and instocktype<17),0) as inqty, isnull((select sum(outstockqty) from dbo.wm_stock_goods_out m where purchasecontractgoodsid=a.id and outtype=4 and m.printId=a.printid),0) as backqty, case when goodstype=2 then isnull(dbo.Get_material_needqty(a.goodsid,1,1),0) when goodstype=1 then isnull(dbo.Get_material_needqty(a.goodsid,2,1),0) end as waitOutqty, (case when goodstype=1 then (select freezeqty from dbo.bas_goods_center where style=1 and warehouseid=1 and goodsid=a.goodsid) when goodstype=2 then (select freezeqty from dbo.M_property_warehouse where style=1 and warehouseid=1 and wid=a.goodsid) end) as freezeqty, isnull((case when goodstype=1 then (select isnull(safeqty,0) from dbo.bas_goods where id=a.goodsid) when goodstype=2 then (select isnull(savesafeqty,0) from dbo.M_property where id=a.goodsid) end ),0) as safeqty from dbo.purchase_contract_goods a where mainid in (select id from dbo.purchase_contract where (type=1 or type=2 or type=11 or type=12 or type=13 or type=14) and status=8 and instockstatus<4 and supplierid = @supplierid)) a where (inqty-backqty)<thispurchaseqty ) x group by goodscnname,goodsNo,goodsMain,modal,waitOutqty,freezeqty,safeqty,color,qtyunit,swareqty order by goodsNo desc END

相關推薦

SQLserver儲存過程建立函式建立檢視

alter PROCEDURE usp_sumgoods(@supplierid VARCHAR(50)) as BEGIN if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetM

Oracle 儲存過程傳送郵件並支援使用者驗證 中文標題和內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SQLSERVER 儲存過程的事務

1 CREATE PROCEDURE ProcedureNamme 2 AS 3 BEGIN 4 SET NOCOUNT ON; 5 6 BEGIN TRY---------------------開始捕捉異常 7 BEGIN TRAN-------

sqlserver儲存過程利用遊標遍歷結果集簡單示例及查詢資料庫時間

本例項用的是sqlserver2005   在儲存過程中遍歷結果,和查詢資料庫中所有 儲存過程名稱 加以處理以文字形式輸出 原始碼: drop procedure findName create procedure findName--建立一個名為findName的儲存過

儲存過程的outoutputreturn 的使用

output 型別的引數需要在儲存過程的引數列表中新增。output型別的引數傳入儲存過程後還會返回其執行後的值。return value型別的引數不需要在儲存過程的引數列表中新增。return value型別的引數就是儲存過程最後return的值。 資料庫中使用out

sqlserver 儲存過程使用臨時表到底會不會導致重編譯

曾經在網路上看到過,SqlServer的儲存過程中使用臨時表,會導致執行計劃無法重用, 執行時候會導致重編譯的這麼一個說法,自己私底下去做測試的時候,根據profile的跟蹤結果, 如果不是統計資訊變更導致導致的重編譯,單單是使用臨時表,並不會導致重編譯, 但是對於

MySQL儲存過程的INOUTINOUT型別 用法

MySQL儲存過程中有IN,OUT,INOUT型別 ----------------------------------- ## IN IN引數只用來向過程傳遞資訊,為預設值。 ## MySQL儲存過程"in"引數:跟C語言的函式引數的值傳遞類似,MySQL儲存過程內部

SQLServer 儲存過程使用事務

儲存過程SQL: create proc ***** @GoodsId int, @Number int, @StockPrice money, @SupplierId int, @EmpId in

sqlserver儲存過程的迴圈

用遊標,和WHILE可以遍歷您的查詢中的每一條記錄並將要求的欄位傳給變數進行相應的處理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUT

sqlserver儲存過程拼接sql語句執行報錯“列名無效”

今天寫儲存過程,遇到一個問題,具體如下:需求是要統計一張報表,這張表的列不固定,因此在儲存過程裡做插入語句的時候,就用到了sql語句拼接再執行。這裡拼接的insert語句是set @sql= 'insert into ##tn(prj) values('[email 

關於sql server 在儲存過程建立臨時表並往臨時表插入資料時出現亂碼的問題

  此前在客戶一個繁體系統的sql  server中執行儲存過程的時候出現亂碼,經查發現建立臨時表後,往臨時表中插入資料時得到的資料是亂碼的,所以檢視建立表的sql指令碼,經查需要將變數型別設定為  

儲存過程建立臨時表為何沒有許可權?

oracle在儲存過程中建立臨時表,執行execute immediate str;報許可權不夠,但是複製出這個sql,直接在sql視窗執行成功,原因如下: 在儲存過程中的所有操作都必須直接顯式授權,不能通過角色授權。你必須把 CREATE TABLE 許可權顯式授予建立 

SQLServer儲存過程使用IN函式

在儲存過程中使用IN函式,傳入多個引數時,會有問題,三種解決方案: 新增函式: create FUNCTION [dbo].[Split2] ( @RowData varchar(max

oracle資料庫儲存過程建立函式

最近,專案需要通過呼叫儲存過程初始化資料庫,根據使用者名稱建立該使用者下的所有表的檢視但是因為在專案中,檢視是通過execute immediate 字串 實現的,所以想,那麼函式的建立是否也可以使用這種方式呢:說幹就幹,最後還真成功了 程式碼如下 CREATE OR RE

MySQL儲存過程的3種迴圈,儲存過程的基本語法,ORACLE與MYSQL的儲存過程/函式的使用區別退出儲存過程方法

  學無止境 部落格園   首頁   新隨筆   聯絡   訂閱  管理 隨筆-1968  評論-103  文章-4&

在oracle儲存過程建立臨時表

在oracle的儲存過程中,不能直接使用DDL語句,比如create、alter、drop、truncate等。 那如果我們想在儲存過程中建立一張臨時表就只能使用動態sql語句了: create o

sql server建立儲存過程(有參無參有輸出)

student表已經有了,“建立”在中間,測試在最下面! select * from student; sid sname sex age tel s001 豐登兒 男 35 13527542451 s002 班克爾

基於C#的類SqlCommand物件呼叫SQLServer儲存過程儲存過程執行成功但是物件方法ExecuteNonQuery()返回-1

問題如題。 【下面是一個例子】 1、儲存過程完成的功能是:插入insert一條記錄,相同主鍵的記錄存在時執行更新update的操作。儲存過程正常執行的返回值是1.(不過本文提到的問題和這個返回值沒關係。) 2、在另一個.cs檔案中使用 SqlCommand物件 呼叫方法Ex

SqlServer儲存過程建立與使用

什麼是儲存過程? T-SQL中的儲存過程,非常類似於net語言中的方法,它可以重複呼叫。當儲存過程執行一次後,可以將語句快取中,這樣下次執行的時候直接使用快取中的語句。 這樣就可以提高儲存過程的效能。  儲存過程Procedure是一組為了完成特定功能的SQL語句集合,經編譯後儲存在資料庫中,使

通過資料庫批量向kettle插入資料建立trans和job的模板(按照不同的要求需要自行調整)

import psycopg2 # 用來操作資料庫的類 class GPCommand(object): # 類的初始化 def __init__(self): self.hostname = 'XXX.XX.X.XX' self.username