alter PROCEDURE Createdata
prosedur
@nama varchar(20),
@alamat varchar(50)
AS
BEGIN TRANSACTION
declare @id int
INSERT INTO data (nama, alamat)
VALUES (@nama,@alamat)
SET @id = SCOPE_IDENTITY()
SELECT
nama = @nama,
alamat = @alamat
FROM data
WHERE ID = @id
COMMIT
GO
============================================== < / p> 请帮助我,我在其他数据库中使用这个存储过程来完成它的工作 但我在数据库“contoh”中运行此存储过程不起作用
错误是:
无法将值NULL插入列“ID”表中 'contoh.dbo.data';列不允许空值。 INSERT失败。该 声明已被终止。
答案 0 :(得分:1)
显然,Id
列不允许空值,并且在应用插入时您没有指定它。
INSERT INTO data (nama, alamat) VALUES (@nama,@alamat)
我猜,Id
列是主键,您可以将其定义为自动增量。因此,使用IDENTITY(1,1)
为Id
列应用自动增量来创建表格;
CREATE TABLE data (
Id int IDENTITY(1,1) NOT NULL,
nama nvarchar(20),
alamat nvarchar(50),
PRIMARY KEY (Id)
);
答案 1 :(得分:0)
你的问题在这里:
INSERT INTO data (nama, alamat) VALUES (@nama,@alamat)
data
具有列标识,它是您的主键,因此无法使用NULL作为其值创建。你可能想要事先获取id,然后调用:
INSERT INTO data (id, nama, alamat) VALUES (@id,@nama,@alamat)