2017-08-17 57 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