2015-05-14 55 views
0

我有以下存储过程来插入代金券的购买,但只接收USer_ID,这是我的凭证表中的外键,但其他字段是自动输入的,这里是我的存储过程'在sql中自动插入值

create proc InsertPurchaseVouchers 
    (
     @User_ID int = null, 
     @Amount decimal(18,2) 

    ) 
    As 

    Begin 
    SET NOCOUNT ON 
     IF NOT EXISTS (SELECT * 
         FROM Voucher 
         WHERE [User_Id] = @User_ID) 
        Insert into Voucher 
        (
         Voucher_Id, 
         Voucher_Amount, 
         Voucher_ExpirityDate, 
         Voucher__PurchaseDate, 
         [User_Id] 
        ) 
        values(
           1, 
           @Amount, 
           DateAdd(m,3,GetDate()), 
           GetDate(), 
           @User_ID 
         ) 
          set Voucher_Id = Scope_Identity 

    End` 

和我的表

USE [CSIS3714_MakaringiH] 
GO 

/****** Object: Table [dbo].[Voucher] Script Date: 2015/05/14 11:11:09 AM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Voucher](
    [Voucher_Id] [numeric](18, 0) NOT NULL, 
    [Voucher_Amount] [decimal](18, 2) NULL, 
    [Voucher_ExpirityDate] [datetime] NULL, 
    [Voucher__PurchaseDate] [datetime] NULL, 
    [User_Id] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [Voucher_Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[Voucher] WITH CHECK ADD CONSTRAINT [fk_Voucher_User] FOREIGN KEY([User_Id]) 
REFERENCES [dbo].[User] ([User_ID]) 
GO 

ALTER TABLE [dbo].[Voucher] CHECK CONSTRAINT [fk_Voucher_User] 
GO 

    USE [CSIS3714_MakaringiH] 
GO 

/****** Object: Table [dbo].[User] Script Date: 2015/05/14 11:12:14 AM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[User](
    [User_ID] [int] NOT NULL, 
    [User_Name] [varchar](50) NULL, 
    [User_Password] [nvarchar](200) NULL, 
    [User_CellNumber] [varchar](10) NULL, 
    [User_IsActive] [nchar](10) NULL, 
    [UserRole_Id] [varchar](1) NULL, 
    [User_FirstName] [varchar](50) NULL, 
    [User_Surnamr] [varchar](50) NULL, 
    [User_IdNumber] [varchar](13) NULL, 
    [User_AirTimeBalance] [decimal](18, 2) NULL, 
PRIMARY KEY CLUSTERED 
(
    [User_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[User] WITH CHECK ADD CONSTRAINT [fk_User_Role] FOREIGN KEY([UserRole_Id]) 
REFERENCES [dbo].[UserRole] ([UserRole_Id]) 
GO 

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [fk_User_Role] 
GO 

凭证3个月

+2

以及究竟是你的问题? – ughai

+0

纠正存储过程的点也应该收到金额 –

+0

如何获取执行存储过程时未输入的其他值 –

回答

0

看代码到期,看来你是想popul自动吃掉Voucher_ID。您最好的选择是将IDENTITY属性添加到Voucher_ID列。当您执行插入操作时,它会自动在该列中生成一个值。

CREATE TABLE [dbo].[Voucher](
[Voucher_Id] [bigint] NOT NULL IDENTITY, -- change to bigint datatype, mark IDENTITY 
[Voucher_Amount] [decimal](18, 2) NULL, 
[Voucher_ExpirityDate] [datetime] NULL, 
[Voucher__PurchaseDate] [datetime] NULL, 
[User_Id] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [Voucher_Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

你的INSERT语句现在排除了VOUCHER_ID柱:

INSERT dbo.Voucher (Voucher_Amount, Voucher_ExpirityDate, Voucher__PurchaseDate, User_Id) 
VALUES (@Amount, DateAdd(m,3,GetDate()), GetDate(), @User_ID)