我有以下存储过程来插入代金券购买,但只接收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个月后到期
答案 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)