多个插入的存储过程没有存在

时间:2012-06-22 03:35:04

标签: sql sql-server-2008

我有一个要求,我必须在不同的表中插入多行。

首先,我想检查角色是否存在于一个表中,然后我必须将值插入role表,然后插入到相关表中。

我担心的是,我必须获取roleid如果它正在插入roleid,我只会插入值。

这一切都应该通过单击和单个存储过程完成。

等待回复。

提前致谢。

1 个答案:

答案 0 :(得分:0)

与@dasblinkenlight一样,您可以使用合并功能进行插入或更新,因此无需再次介绍。

如果我正确理解了您的问题,您希望使用单个存储过程将多行插入到不同的表中(例如在一次调用中保留整个对象图)。扩展Microsoft提供的示例,您可以使用以下示例代码。

DECLARE @idoc int

DECLARE @doc varchar(1000)
SET @doc ='
<CustomersAndOrders>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00" />
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00" />
</Customer>
</CustomersAndOrders>'

--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement that uses the OPENXML rowset provider.
INSERT INTO [YOUR_TABLE_NAME] ([Column1], [Column2])     
SELECT [CustomerID], [ContactName]
FROM OPENXML (@idoc, '/CustomersAndOrders/Customer',1)
WITH ([CustomerID] varchar(10), [ContactName] varchar(20))

INSERT INTO [YOUR_OTHER_TABLE_NAME] ([Column1], [Column2])     
SELECT [EmployeeID], [OrderDate]
FROM OPENXML (@idoc, '/CustomersAndOrders/Customer/Order',1)
WITH ([EmployeeID]  varchar(10), [OrderDate] varchar(20))