0

以下は、サブクエリを使用して列 TableString に値を返す、トリガーされた SQL の一部です。サブクエリは、最初の 2 つの値と Fname の「マーカー」を返しますが、その後は何も返しません (セミコロンでさえありません)。TableString 列は、255 文字に設定された nvarchar であり、挿入または更新中に同様のデータをすべてキャプチャします。

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
4

2 に答える 2

3

これは何の関係もありませんが、データの切り捨てISNULLの結果です。

注意を払う:

.. AS nvarchar(30)

つまり、さらに多くのデータが省略されています。(この場合、出力には「Fname:」さえ含まれていません。)

于 2012-09-04T17:38:04.050 に答える
0

ちなみに、Nvarchar(30) は 30 バイトを格納し、Unicode (N) は非 Unicode を格納している場合でも 1 文字 2 バイトであるため、返される文字数は 28 です。varchar 宣言の数値は文字数ではなく、使用するバイト数です。Nvarchar を使用すると、本当に人々を惹きつけます。

于 2015-03-10T18:52:58.683 に答える