存储过程 - 传递参数的XML和读取数据
问题描述:
我有这个存储过程,从XML中读取数据,并提出一些刀片存储过程 - 传递参数的XML和读取数据
ALTER procedure [dbo].[SP_InsertIOs]
@iosxml xml AS
DECLARE @currRecord int
-- parse the records from the XML
EXECUTE sp_xml_preparedocument @currRecord OUTPUT, @iosxml
BEGIN TRY
INSERT INTO SN_IO ([C1] ,[C2] ,[C3])
SELECT [C1] ,[C2] ,[C3]
FROM OPENXML (@currRecord, 'ios/io', 1)
WITH ([C1] [varchar](25) 'C1',
[C2] [varchar](25) 'C2',
[C3] [varchar](20) 'C3' )
END TRY
BEGIN CATCH
//SELECT SOME ERROR
END CATCH
EXECUTE sp_xml_removedocument @currRecord
的XML看起来像这样
<ios>
<io>
<C1>a</C1>
<C2>b</C2>
<C3>c</C3>
</io>
<io>
<C1>x</C1>
<C2>y</C2>
<C3>z</C3>
</io>
</ios>
一切进展顺利。 有时C1或C2或C3可空,这里是我的问题:
在此过程中,使插入时如果C1为空或C2为空或C3为null跳过记录,并没有使插入
答
你只需要一个WHERE
条款我想。
INSERT INTO SN_IO ([C1] ,[C2] ,[C3])
SELECT [C1] ,[C2] ,[C3]
FROM OPENXML (@currRecord, 'ios/io', 1)
WITH ([C1] [varchar](25) 'C1',
[C2] [varchar](25) 'C2',
[C3] [varchar](20) 'C3' )
WHERE [C1] IS NOT NULL AND [C2] IS NOT NULL AND [C3] IS NOT NULL
或者你可以在XPath做到这一点,而不是我的猜测可能会更有效
FROM OPENXML (@currRecord, 'ios/io[C1 and C2 and C3]', 1)
宾果。我从第一个地方尝试过,但有一个错误。对于[C1]为NULL,标记必须丢失,并且我使用 和 null –
ion
2010-07-14 09:35:53