Sql server 将xml拆分为多行以执行RAISERROR insert触发器
我的insert触发器中的以下代码返回一行中的所有值。如果用户一次输入1-10行,则可以,但如果用户输入100行,则raiserror输出将变得太长,无法读取。请问最好的解决方案是什么 触发代码:Sql server 将xml拆分为多行以执行RAISERROR insert触发器,sql-server,xml,triggers,Sql Server,Xml,Triggers,我的insert触发器中的以下代码返回一行中的所有值。如果用户一次输入1-10行,则可以,但如果用户输入100行,则raiserror输出将变得太长,无法读取。请问最好的解决方案是什么 触发代码: DECLARE @level_name nvarchar(MAX) = ( SELECT concat ([S_ID],'-', [l_NAME], '-') + ' ' FROM inserted
DECLARE @level_name nvarchar(MAX) =
(
SELECT concat ([S_ID],'-', [l_NAME], '-')
+ ' '
FROM inserted ic
where not EXISTS (SELECT 1 FROM [dbo].[LEVELS] c
WHERE ic.[geo]=c.[GEO] and c.level_name=ic.[l_NAME]
)
FOR XML PATH('')
);
IF @level_name IS NOT NULL
BEGIN
RAISERROR('level name not found: %s', 16, 1, @level_name) with log;
END;
输出:
100-A2001 101-A2001 102-A2001 .......
如果在每个级别后添加新行会怎么样?谢谢,但我该怎么做?是否有方法循环RAISERROR?可以在连接级别时添加新行。例如:选择concat[S_ID]、“-”、[l_NAME]、“-”、CHAR13。。。CHAR13是新产品线的代码,刚做到这一点,但它添加了100-&x0D;SOA2001 101-&x0D;SOA2001仍然在一行中,这是因为您使用的是FOR XML路径。它将新行转换为字符。另一种方法是:创建表MyStringsvalue VARCHARMAX;在myString中插入值'first'、'second'、'third';声明结果VARCHARMAX=;选择Result=ISNULLvalue,+''+CHAR13+来自MyStrings的结果;选择结果;删除表MyStrings;