在sql中自动插入值

时间:2015-05-14 09:15:13

标签: sql-server mysqli

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

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个月后到期

1 个答案:

答案 0 :(得分:0)

查看代码,您似乎想要自动填充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)