存储过程插入问题

时间:2016-05-19 19:53:58

标签: sql sql-server sql-server-2008

我有一个T-SQL存储过程,可以插入同一个数据库中的六个不同的表中。

e.g:

Declare @...variables name
declare @newid as int
declare @Identityid as int

set @newid = 0
set @Identityid = 0

begin try
begin transaction

    INSERT INTO dbo.TABLE1 (col1, column2)
    VALUES (col1.values, col2.values)

    SET @newid = @@IDENTITY

    INSERT INTO dbo.TABLE2 (Table2_id, col1, column2)
    VALUES (@newid, col1.values, col2.values)  !--it's taking the same ID)

    INSERT INTO dbo.TABLE3 (Table3_id, col1, column2)
    VALUES(@newid, col1.values, col2.values)

    INSERT INTO dbo.TABLE4 (Table4_id, col1, column2)
    VALUES(@newid, col1.values, col2.values)

    INSERT INTO dbo.TABLE5 (col1, column2)
    VALUES (col1.values, col2.values)

    SET @Identityid = @@IDENTITY     (!--this IdentityID will be same for
                                         next table)

    INSERT INTO dbo.TABLE6 (Table6_id, col1, column2) 
    VALUES (@Identityid, col1.values, col2.values)

    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    RAISERROR('ERROR',16,1)
    ROLLBACK TRANSACTION
    PRINT ERROR_MESSAGE()
END CATCH
END

现在我遇到了需要在最后两个表(Table5Table6)中插入多个记录的情况。

我从Web服务(VB.NET)调用此过程

现在我正在旋转我的车轮试图找出如何只将最多两个记录插入到最后两个表中。我怎么能这样做?

解答:

表值参数。 "表值参数提供了一种简单的方法,可以将多行数据从客户端应用程序封送到SQL Server,而无需多次往返或特殊的服务器端逻辑来处理数据。您可以使用表值参数来封装客户端应用程序中的数据行,并使用单个参数化命令将数据发送到服务器。传入的数据行存储在一个表变量中,然后可以使用Transact-SQL"

进行操作。

查看并遵循表格值参数Click here

的步骤

3 个答案:

答案 0 :(得分:1)

您可以通过为存储过程中的最后两个表添加其他插入语句来完成此操作。

答案 1 :(得分:0)

可以通过以下过程实现。

INSERT INTO dbo.TABLE5(col1,column2)     VALUES(col1.values,col2.values),     (col1.values,col2.values),
    (col1.values,col2.values)

答案 2 :(得分:0)

我得到了答案:表值参数。 "表值参数提供了一种简单的方法,可以将多行数据从客户端应用程序封送到SQL Server,而无需多次往返或特殊的服务器端逻辑来处理数据。您可以使用表值参数来封装客户端应用程序中的数据行,并使用单个参数化命令将数据发送到服务器。传入的数据行存储在一个表变量中,然后可以使用Transact-SQL"

进行操作。

查看并遵循表格值参数Click here

的步骤