我有一个以XML格式返回对象的存储过程。如何处理对象不存在的情况?
我不能返回null或空字符串,因为XmlReader抱怨它不是有效的XML。
如果我返回一个空标签,我怎么知道它只是一个空对象还是没有对象?
答案 0 :(得分:1)
嗯,常见的方法是某些标记属性,例如xsi:nil="true"
(虽然这只是一个例子)。
答案 1 :(得分:1)
我见过的两种方式是:
第一个选项通常更容易处理,但会产生更多文字。第二个可能会导致更小的xml文件。
答案 2 :(得分:0)
返回自定义的空标记()并检查它或只是改变读取数据的方式:
答案 3 :(得分:0)
为存储过程创建一个out参数。在存储过程内部,将现有对象的值设置为1,或者将不存在的值设置为0。如果out参数为1,则仅反序列化存储过程的xml结果。
CREATE PROCEDURE sp_GetObjectAsXml
(
@intId int,
@intExists int out
)
AS
BEGIN
SELECT 'hello world' WHERE 1 = @intId
SET @intExists = @@ROWCOUNT
END
-- Happy Path
DECLARE @intExists int
exec sp_GetObjectAsXml 1, @intExists out
SELECT @intExists -- results in 1
-- Sad Path
DECLARE @intExists int
exec sp_GetObjectAsXml 10, @intExists out
SELECT @intExists -- results in 0
答案 4 :(得分:0)
根据您的“外部约束”(例如,您控制的XML生成/消费过程的多少),您可以通过不包括元素来表示null。
接收方(模式验证等)当然必须准备好处理可选元素。