SQL Server 2012。触发器将行转换为Nvarchar,并写入另一个表中的单行
我正在使用adventureworks2012数据库。 我有一个名为AuditTable的审计表,我想将person.address表中的所有插入内容作为一个大文本字符串写入prevValue列 我试图先将每个插入的值转换为字符,然后写入auditTable(prevValue),但它一直只写入一个空行 这是我的人,地址是斯佩森SQL Server 2012。触发器将行转换为Nvarchar,并写入另一个表中的单行,sql,triggers,sql-server-2012,Sql,Triggers,Sql Server 2012,我正在使用adventureworks2012数据库。 我有一个名为AuditTable的审计表,我想将person.address表中的所有插入内容作为一个大文本字符串写入prevValue列 我试图先将每个插入的值转换为字符,然后写入auditTable(prevValue),但它一直只写入一个空行 这是我的人,地址是斯佩森 ALTER TRIGGER [Person].[sPerson] ON [Person].[Address] AFTER INSERT AS BE
ALTER TRIGGER [Person].[sPerson] ON [Person].[Address]
AFTER INSERT
AS
BEGIN
INSERT INTO AdventureWorks2012.HumanResources.AuditTable(PrevValue)
SELECT
N'ID : ' + CAST(AddressID AS NVARCHAR(20)) + N'Address: ' + AddressLine1 +
N', ' +AddressLine2 + N','+ City + N',' + CAST(StateProvinceID AS NVARCHAR(20)) + + N',' + CAST(PostalCode AS NVARCHAR(20))+ + N',' + CAST(SpatialLocation AS NVARCHAR(200)) + + N',' + CAST(rowguid AS NVARCHAR(100))+ + N',' +CAST (ModifiedDate AS NVARCHAR(40))
FROM Inserted
END
GO
多谢各位 有关这方面的线索,请参见:
当SET CONCAT_NULL_YIELDS_NULL处于启用状态时,将NULL值与字符串串联将产生NULL结果
现在你必须用它来写代码,因为在将来,他们不支持关闭它
因此,您需要做的是,对于可能包含NULL
值的每一列,使用提供适当默认值的值包装您对其的访问,例如,如果StateProvinceID
是唯一可为空的列,您将有:
... N',' + COALESCE(CAST(StateProvinceID AS NVARCHAR(20)),'<No State>') + N',' ...
。。。N','+合并(CAST(StateProvinceID为NVARCHAR(20)),'+N','。。。
其中
是当列为空时希望显示的内容
另一方面,我可能会使用SQL Server的XML转换工具,而不是执行所有这些字符串连接,并将生成的XML存储在审计表中。就支持不同的模式而言,它同样灵活,但它至少给您带来了一些希望,您可以使用XML查询工具查询这个审计表以获取感兴趣的数据
XML转换工具自动处理
NULL
s(通过省略元素/属性),而不必应用上述字符串解决方法。Hi。谢谢我可能会进行XML转换,因为它看起来更简单。