如何让我的TSQL存储过程返回数据?

时间:2016-01-14 17:52:03

标签: sql-server tsql stored-procedures

我开始使用存储过程的“婴儿步骤”,最终会有些复杂。我首先要做的就是创建一个临时表,用一些虚假值填充一些字段,然后在调用时从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中获得有意义的(虽然可以说是做作的)数据?

1 个答案:

答案 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可能就是您要找的。但是,由于您在存储过程中重新创建表,因此我不会在任何时候看到您使用更新。