2017-08-17 97 views
1

这段代码看起来像是要为我工作,但事实并非如此。从存储过程插入完成但不能插入

ALTER PROC dbo.spInsertNewVendor 
AS 
BEGIN 
     BEGIN TRY 
      BEGIN TRAN 
      INSERT INTO Vendors (VendorID, VendorName, Address, City, State, ZipCode, Active) 
      VALUES (1002, 'Appleburg', '1472 Witch Hollow Way', 'Salt Lake City', 'Utah', 84115, 'TRUE') 
      COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
     END CATCH 
END 

EXEC dbo.spInsertNewVendor 

我已经改变了存储过程,一切都很顺利,但是当我执行过程时,它并没有像我想要的那样插入任何行。我应该做什么不同的事情?我错过了什么?

UPDATE:

Vendors 
-VendorID(PK,int) 
-VendorName(nvarchar) 
-Address(nvarchar) 
-City(nvarchar) 
-State(nvarchar) 
-ZipCode(int) 
-Active(nvarchar) 
+0

可以请你的供应商提供的表架构的细节? –

+0

当然。我更新了问题 – ShreddedSaber

+1

VendorID是否设置为自动增量?如果是,那么你不能在插入语句中设置VendorID,你只需要插入没有VendorID的数据。 –

回答

0
-- Vendor ID Is a Primary Key And You Cannot Insert Value In PK. 
     ALTER PROC dbo.spInsertNewVendor 
     AS 
     BEGIN 
       BEGIN TRY 
        BEGIN TRAN 
        INSERT INTO Vendors (VendorName, Address, City, State, ZipCode, Active) 
        VALUES ('Appleburg', '1472 Witch Hollow Way', 'Salt Lake City', 'Utah', 84115, 'TRUE') 
        COMMIT TRAN 
       END TRY 
       BEGIN CATCH 
        ROLLBACK TRAN 
       END CATCH 
     END 
     GO 
     EXEC dbo.spInsertNewVendor 
+0

@shredded什么是你分配的NVARCHAR的长度,如果它是1,它将不允许插入数据。 –

0

首先通过此找出错误:

alter PROC dbo.spInsertNewVendor 
AS 
BEGIN 
     BEGIN TRY 
      BEGIN TRAN 
      INSERT INTO Vendors (VendorID, VendorName, Address, City, State, ZipCode, Active) 
      VALUES (1002, 'Appleburg', '1472 Witch Hollow Way', 'Salt Lake City', 'Utah', 84115, 'TRUE') 
      COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
      SELECT ERROR_MESSAGE() AS ErrorMessage; 
     END CATCH 
END 

EXEC dbo.spInsertNewVendor 

如果厂商ID是标识列,然后上面的代码将会给你错误,那么 试试这个

alter PROC dbo.spInsertNewVendor 
AS 
BEGIN 
     BEGIN TRY 
      BEGIN TRAN 
      INSERT INTO Vendors (VendorName, Address, City, State, ZipCode, Active) 
      VALUES ('Appleburg', '1472 Witch Hollow Way', 'Salt Lake City', 'Utah', 84115, 'TRUE') 
      COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
      SELECT ERROR_MESSAGE() AS ErrorMessage; 
     END CATCH 
END 

EXEC dbo.spInsertNewVendor 
0

我在本地复制了完整的SQL查询并且工作正常,更新表后可能面临的唯一问题是您必须已将VendorID列指定为自动增量的标识,并且在您提供的插入过程中VendorID的值。

我建议您在请您清洁您的餐桌后再尝试再次执行您的程序。

这是我在本地系统上尝试的: 我希望我的供应商表的模式必须与您的模式相同。

create table Vendors 
(VendorID int, 
VendorName nvarchar(100), 
Address nvarchar(100), 
City nvarchar(100), 
State nvarchar(100), 
ZipCode int, 
Active nvarchar(100) 
CONSTRAINT PK_Cendor PRIMARY KEY (VendorID)) 

CREATE PROC dbo.spInsertNewVendor 
AS 
BEGIN 
     BEGIN TRY 
      BEGIN TRAN 
      INSERT INTO Vendors (VendorID, VendorName, Address, City, State, ZipCode, Active) 
      VALUES (1002, 'Appleburg', '1472 Witch Hollow Way', 'Salt Lake City', 'Utah', 84115, 'TRUE') 
      COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
     END CATCH 
END 

EXEC dbo.spInsertNewVendor 

输出: enter image description here