Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2012。触发器将行转换为Nvarchar,并写入另一个表中的单行_Sql_Triggers_Sql Server 2012 - Fatal编程技术网

SQL Server 2012。触发器将行转换为Nvarchar,并写入另一个表中的单行

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

我正在使用adventureworks2012数据库。 我有一个名为AuditTable的审计表,我想将person.address表中的所有插入内容作为一个大文本字符串写入prevValue列

我试图先将每个插入的值转换为字符,然后写入auditTable(prevValue),但它一直只写入一个空行

这是我的人,地址是斯佩森

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转换,因为它看起来更简单。