日期:2014-05-17  浏览次数:20602 次

请问如何写存储过程,谢谢!
分别有库存和仓库二张表,现在给定缺少的备件名称,缺货的仓库名称,以及缺货的数量,找出拥有这个备件的离缺货仓库最近的仓库名称,

请问如何写存储过程,谢谢!

-- --建立库存表
--create table stock
--(
-- [id] [int] identity(1,1) primary key,
-- [storageName] [varchar](8) NOT NULL,/*仓库名称*/
-- [spareID] [varchar](8) NOT NULL,/*备件编码*/
-- [spareName] [varchar](20) NOT NULL,/*备件名称*/
-- [model] [varchar](20) NOT NULL,/*型号规格*/
-- [stockAmount] [int] NOT NULL,/*库存数量*/
-- [venderName] [varchar](20) NOT NULL /*厂家名称*/
--)

---- 建立仓库表
--create table storage
--(
-- [id] [int] identity(1,1),
-- [storageID] [varchar](8) NOT NULL primary key,/*仓库编码*/
-- [storageName] [varchar](20) NOT NULL,/*仓库名称*/
-- [storageAddress] [varchar](100) NOT NULL,/*仓库地址*/
-- [storageTel] [varchar](20) NOT NULL,/*仓库电话*/
-- [type] [varchar](20) NOT NULL,/*仓库类别*/
-- [distance] [float] NOT NULL /*距中心距离*/
--)

------解决方案--------------------
给定缺少的备件名称,缺货的仓库名称,以及缺货的数量
---
没看懂。。
------解决方案--------------------
另外需要一个表,记录 应有的备件名称,应有的仓库名称,应有的库存数量
否则没法对比啊.
------解决方案--------------------
SQL code
/****** Object:  StoredProcedure [dbo].[up_find_spare]    Script Date: 12/08/2011 14:47:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        prcak47    
-- Create date: 20111200
-- Description:    分别有库存和仓库二张表,现在给定缺少的备件名称,缺货的仓库名称,以及缺货的数量,
--                找出拥有这个备件的离缺货仓库最近的仓库名称,
-- =============================================
create PROCEDURE [dbo].[up_find_spare] @SpareName varchar(8),@StorageName varchar(8),@SpareAmount int

AS
BEGIN

----找到存货数量大于需求数量的仓库
select storagename,stockamount
into #stock_has
from stock
    where SpareName = @SpareName
    and stockamount >= @SpareAmount

----找到有配件的,距离最短的仓库,但是算法上只能是各个仓库距距离中心的位置和
----这会造成如果仓库本身有库存,距离是仓库本身距离中心的两倍
select top 1 storage.storageName,
        #stock_has.stockamount,
        storage.distance + storage_own.distance
from storage,#stock_has,storage as storage_own
    where storage.storageName = #stock_has.storageName
    and storage_own.StorageName = @StorageName
    order by storage.distance + storage_own.distance desc
    
END