我开始使用存储过程的“婴儿步骤”,最终会有些复杂。我首先要做的就是创建一个临时表,用一些虚假值填充一些字段,然后在调用时从SP返回表。这是:
CREATE Procedure [dbo].[priceVarianceTest]
@Unit varchar(25),
@BegDate datetime,
@EndDate datetime
AS
DECLARE @Week1End datetime = DATEADD(Day, 6, @BegDate);
DECLARE @Week2Begin datetime = DATEADD(Day, 7, @BegDate);
create table #temp1
(
Unit varchar(50),
MemberNo varchar(42),
MemberItemCode varchar(42),
ShortName varchar(25),
ItemCode varchar(50),
WVItem varchar(25),
WVItemCode varchar(25),
WVDescription varchar(250),
Week1Usage varchar(25),
Week2Usage varchar(25),
UsageVariance varchar(25),
Week1Price varchar(25),
Week2Price varchar(25),
PriceVariance varchar(25),
PercentageOfPriceVariance varchar(42)
)
-- now try to add some data and return it:
Update #temp1 set
Unit = 'LOS CARNEROS',
MemberNo = '1289',
MemberItemCode = '76Trombones';
select * from #temp1;
以下是我从服务器资源管理器执行它时所呈现的内容(在我输入'bla'之后以及提示输入参数值时的几个日期):
USE [CPSData]
GO
DECLARE @return_value Int
EXEC @return_value = [dbo].[priceVarianceTest]
@Unit = N'bla',
@BegDate = N'2015-01-01',
@EndDate = N'2016-01-01'
SELECT @return_value as 'Return Value'
GO
我希望“select *”会返回一些数据,但我在“结果”窗格中得到的只是:
Return Value
----------------
1 0
为什么它不会返回更像:
Unit MemberNo MemberItemCode ShortName . . .
---- -------- -------------- --------- -----
LOS CARNEROS 1289 76Trombones Null . . .
我需要做些什么才能从SP中获得有意义的(虽然可以说是做作的)数据?
答案 0 :(得分:2)
Update #temp1 set
Unit = 'LOS CARNEROS',
MemberNo = '1289',
MemberItemCode = '76Trombones';
如果没有行,则无效。
您需要使用INSERT而不是UPDATE:
INSERT INTO #temp1 (Unit,MemberNo,MemberItemCode)
VALUES('LOS CARNEROS','1289','76Trombones')
如果您希望能够同时执行这两项操作,那么MERGE
可能就是您要找的。但是,由于您在存储过程中重新创建表,因此我不会在任何时候看到您使用更新。