【发布时间】:2018-08-03 09:28:04
【问题描述】:
我在 MSSQL 中有一个 SP,它会将错误日志插入到 SQL 中
ALTER PROCEDURE [dbo].[TestLog]
@PrimaryName nvarchar(255),
@ERROR nvarchar(4000)
AS
BEGIN
insert into Process_Log
(
PrimaryName ,
ERROR
) VALUES
(
@PrimaryName ,
@ERROR
)
END
我的示例错误消息是这样的:
Violation of PRIMARY KEY constraint 'PK__AP__2EC21549E681BC94'. Cannot insert duplicate key in object 'dbo.Test'. The duplicate key value is (215009).
The statement has been terminated.
因为我在字符串中有 ',所以我必须使用双引号并 SET QUOTED_IDENTIFIER OFF。
我无法更改错误消息或对其进行编辑,因为它来自其他应用程序。
编辑:
我的进程表结构:
CREATE TABLE [dbo].[Process_Log](
[PrimaryName] [nvarchar](255) NULL,
[ERROR] [nvarchar](max) NULL
)
【问题讨论】:
-
那么这里的问题是什么?您是否知道您也可以将
'替换为'',这与双引号等一样有效? -
是的,我知道,但正如我所说,我无法编辑错误消息。它必须保持原样。当我使用 SET QUOTED_IDENTIFIER OFF 并且字符串的 len 超过 128 个 SQL 抛出和错误(len 太长)时。我试图做 left(@ERROR, 128) 但它不适用于双引号中的值。
-
您的错误消息字段非常适合 varchar(max) - 我经常看到错误日志,其中消息/堆栈跟踪存储为长字段,但最终可能不得不截断关键消息。有些人开了一个 2 小时的会议,讨论如何制作他们的错误表,不知道数据类型 text、varchar(max) 等。
-
我的表有 nvarchar(MAX) 作为错误字段。
-
在您的程序中,参数限制为 4000 个字符
标签: sql-server stored-procedures sql-insert