我有一個觸發器,從inserted
表取柱(和它們的值),並插入它們作爲文本在審計表,例如:將非varchar列寫入文本列時CAST是否必需?
INSERT INTO audit
(tablename, changes)
SELECT
'mytable',
'id=' + cast(id as nvarchar(50) + ';name=' + name + ';etc...'
FROM
inserted
我有最列是非VARCHAR大表。爲了將它們連接成一個字符串,我需要投射每一列。
是否有必要這樣做?有沒有更好的辦法?
這question中的第二個(未標記的答案)巧妙地使用xml和cross apply
連接值。
有沒有辦法將它擴大到包括列名,這樣最終的結果將是:
'id=1;name=myname;amount=100;' etc....
另一個解決方案是'SET CONCAT_NULL_YIELDS_NULL OFF',所以如果有'NULL',字符串仍然會被連接在一起。 – 2015-03-13 08:23:51
@EvaldasBuinauskas好點,但[CONCAT_NULL_YIELDS_NULL](https://msdn.microsoft.com/en-us/library/ms176056.aspx)已被棄用,因此建議不要在新工作中使用它。 – 2015-03-13 08:26:53