Here is my Table, called Tour_Lists. If my table is empty. Store Procedure work very well. But after insert first row. I continue inserting second row and get error:
Cannot insert the value NULL into column 'Ma_tour', table 'Travel.dbo.Tour_Lists'; column does not allow nulls. INSERT fails. The statement has been terminated.
What's wrong in my code?
Store Procedure
/****** Object: StoredProcedure [dbo].[ThemTour] Script Date: 07/05/2013 21:16:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ThemTour]
@ten_tour nvarchar(100),
@lich_trinh nvarchar(MAX),
@gia decimal(18,0),
@thoi_gian nvarchar(50),
@khoi_hanh nvarchar(50),
@noi_khoi_hanh nvarchar(100),
@phuong_tien nvarchar(50),
@khach_san nvarchar(30),
@diem_den nvarchar(100),
@anh_dai_dien image,
@trang_thai bit = 1
AS
BEGIN
declare @return nvarchar(100),
@Matourcuoi nvarchar(100),
@sothutu nvarchar(50),
@dodaichuoi int,
@tangsotour int
select top(1) @Matourcuoi = Ma_tour from Tour_Lists order by Ma_tour desc -- lấy cái MaTour cuối cùng trong bảng
if(@Matourcuoi is not null)
begin
-- Analyzing...
select @dodaichuoi = len(@Matourcuoi) -- cho biết độ dài của chuổi
select @sothutu = substring(@Matourcuoi,3,@dodaichuoi - 2) -- Trả về con số trong chuối, bắt đầu lấy từ ký tự thứ 3 cho đên hêt chuổi (trừ 2 chữ 'NV' ra)
select @tangsotour = convert(int,@tangsotour) + 1 -- cho nó tăng thêm 1 đơn vị, chuẩn bị chèn vô
-- cấu trúc switch-case-default bên SQL là thế này
select @return = case
when len(convert(nvarchar,@tangsotour))=1 then 'Tour000'+convert(nvarchar,@tangsotour) --nếu là số có 1 chữ số
when len(convert(nvarchar,@tangsotour))=2 then 'Tour00'+convert(nvarchar,@tangsotour) -- nếu là 2 chữ số
when len(convert(nvarchar,@tangsotour))=3 then 'Tour0'+convert(nvarchar,@tangsotour) -- nếu là 3 chữ số
when len(convert(nvarchar,@tangsotour))=4 then 'Tour'+convert(nvarchar,@tangsotour) --nếu là 4 chữ số
else 'Tour'+convert(nvarchar,@tangsotour) -- nếu trên 4 chữ số: từ 10,000 trở đi
end -- end of switch-case-default
end -- endif
else select @return='Tour0001' -- nếu chưa có mẩu tin nào trong bảng Tour_Lists
insert into Tour_Lists (Ma_tour,Ten_tour,Lich_trinh,Gia,Thoi_gian,Khoi_hanh,Noi_khoi_hanh,Phuong_tien,Khach_san,Diem_den,Anh_dai_dien,Trang_thai)
VALUES (@return,@ten_tour,@lich_trinh,@gia,@thoi_gian,@khoi_hanh,@noi_khoi_hanh,@phuong_tien,@khach_san,@diem_den,@anh_dai_dien,@trang_thai)
END