SQL Server に次のストアド プロシージャがあります。
alter PROCEDURE [dbo].[spSendLogLinesAsXML]
(
@device_id varchar(128),
@application_name VARCHAR(64),
@application_user_name VARCHAR(6),
@log_lines_xml XML
)
AS
BEGIN
DECLARE
@ixml INT,
@log_line_dt DATETIME,
@log_line_message varchar(max)
EXEC sp_xml_preparedocument @ixml OUTPUT,
@log_lines_xml
SELECT @log_line_dt = dt,
@log_line_message = data
FROM OPENXML(@ixml, '/lines/line', 3) WITH (
dt DATETIME,
data varchar(max)
)
--I want to do the following for each line element
EXEC spSendLogLine
@device_id = @device_id,
@application_name = @application_name,
@application_user_name = @application_user_name,
@log_line_dt = @log_line_dt,
@log_line_message = @log_line_message
EXEC sp_xml_removedocument @ixml
return -100
END
次のようにストアド プロシージャを呼び出します。
EXEC @return_value = [dbo].[spSendLogLinesAsXML]
@device_id = N'devid123',
@application_name = N'CJA App 1',
@application_user_name = N'anatoli',
@log_lines_xml = '<lines><line><dt>2013-03-01T13:00:00</dt><data>Something happened and it was logged</data></line><line><dt>2013-03-01T13:01:00</dt><data>Oh my god the building is burning and people are dying</data></line></lines>'
行要素ごとに spSendLogLine を呼び出すようにストアド プロシージャを変更するにはどうすればよいですか?
編集:SQLによると、各レコードカーソルのストアドプロシージャの呼び出しは悪いです。だから、もっといい方法を知りたい。これを達成するためにストアド プロシージャがどれだけ変更されても、それが適切に機能し、適切に機能する限り、気にしません。