SQL子查询中的ISNULL没有返回任何内容

时间:2012-09-04 17:35:24

标签: sql tsql

下面是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

2 个答案:

答案 0 :(得分:3)

这与ISNULL无关,而是截断数据的结果。

注意:

.. AS nvarchar(30)

也就是说,省略了更多的数据。 (在这种情况下,输出甚至不包含“Fname:”。)

答案 1 :(得分:0)

作为旁注,他的返回字符数为28,因为Nvarchar(30)表示存储30个字节,Unicode(N)是一个字母的两个字节,即使您存储的是非Unicode。 varchar声明中的数字不是字符数,而是要使用的字节数。当他们使用Nvarchar时,它确实让人们感兴趣。