たとえば、xmlを次のように想定します
<StoredProcedure>
<User>
<UserName></UserName>
</User>
<Profile>
<FirstName></FirstName>
</Profile>
<Address>
<Data></Data>
<Data></Data>
<Data></Data>
</Address>
</StoredProcedure>
これはストアドプロシージャになります
INSERT INTO Users (UserName) SELECT(UserName) FROM OPENXML(@idoc,'StoredProcedure/User',2)
WITH ( UserName NVARCHAR(256))
ここで、これはidoc変数値を提供し、@docはストアドプロシージャへの入力です。
DECLARE @idoc INT
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
同様の手法を使用して、単一のストアドプロシージャで3つの挿入を実行します。これはデータベースへの1回の呼び出しであり、このストアドプロシージャへの1回の呼び出しで複数のアドレス要素が挿入されることに注意してください。
アップデート
ここであなたを誤解させないために、あなたが何をしようとしているのかを理解するための完全なストアドプロシージャがあります
USE [DBNAME]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[procedure_name]
@doc [ntext]
WITH EXECUTE AS CALLER
AS
DECLARE @idoc INT
DECLARE @RowCount INT
SET @ErrorProfile = 0
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
BEGIN TRANSACTION
INSERT INTO Users (UserName)
SELECT UserName FROM OPENXML(@idoc,'StoredProcedure/User',2)
WITH ( UserName NVARCHAR(256) )
-- Insert Address
-- Insert Profile
SELECT @ErrorProfile = @@Error
IF @ErrorProfile = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN
ROLLBACK TRAN
END
EXEC sp_xml_removedocument @idoc