Sql server 从存储过程插入已完成但未插入

Sql server 从存储过程插入已完成但未插入,sql-server,stored-procedures,transactions,insert,try-catch,Sql Server,Stored Procedures,Transactions,Insert,Try Catch,这段代码看起来对我有用,但事实并非如此 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 Ho

这段代码看起来对我有用,但事实并非如此

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
我修改了存储过程,一切都很顺利,但是当我执行该过程时,它没有像我希望的那样插入任何行。有什么不同的我应该做的吗?我遗漏了什么

更新:

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

首先通过以下步骤找出错误:

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
若vendorID是标识列,那个么上面的代码将给出错误信息 试试这个


首先通过以下步骤找出错误:

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
若vendorID是标识列,那个么上面的代码将给出错误信息 试试这个


我在我的本地服务器上复制了完整的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
输出:

我在我的本地计算机上复制了完整的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
输出:

能否提供供应商表架构的详细信息?当然可以。我更新了问题VendorID是否设置为自动递增?如果是,则无法在insert语句中设置VendorID。您只需在没有VendorID的情况下插入数据。是否可以提供供应商表架构的详细信息?确定。我更新了问题VendorID是否设置为自动递增?如果是,则无法在insert语句中设置VendorID,您只需插入数据而无需VendorID@shredded如果NVARCHAR的长度为1,则不允许插入数据。@SHEARD如果NVARCHAR的长度为1,则不允许插入数据。