下面是SQL触发的一部分,它使用子查询返回TableString列中的值。子查询将返回前两个值和Fname的“标记”,但之后没有(甚至不是分号)。 TableString列是一个nvarchar,设置为255个字符,并在插入或更新期间捕获所有类似的数据。
INSERT INTO TransactionLog (TransactionDate, Operator, TableName, Action
, TableString, UserId)
SELECT LastChangeDate
, 'Op'
, @tableName
, @action
, CAST('sNum:' + CAST(sNumber as nvarchar(10)) + ' entType:' + EntityType
+ ' Fname:' + ISNULL(FirstName, 'NULL')
+ ' Lname:' + ISNULL(LastName, 'NULL')
+ ' suff:' + ISNULL(NameSuffix, 'NULL')
+ ' corpName:' + ISNULL(CorporateName, 'NULL' )
+ ' ctrlId:' + ISNULL(CAST(ControlId as nvarchar(3)), 'NULL')
AS nvarchar(30)) as TableString
, LastChangeOperator
FROM deleted
TableString中的返回值:
sNum:1000024 entType:S Fname
答案 0 :(得分:3)
这与ISNULL
无关,而是截断数据的结果。
注意:
.. AS nvarchar(30)
也就是说,省略了更多的数据。 (在这种情况下,输出甚至不包含“Fname:”。)
答案 1 :(得分:0)
作为旁注,他的返回字符数为28,因为Nvarchar(30)表示存储30个字节,Unicode(N)是一个字母的两个字节,即使您存储的是非Unicode。 varchar声明中的数字不是字符数,而是要使用的字节数。当他们使用Nvarchar时,它确实让人们感兴趣。