sql-server - 太长。最大长度为 128。使用双引号时
问题描述
我在 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
)
解决方案
在您的查询中替换:
insert into Process_Log
(
PrimaryName ,
ERROR
) VALUES
(
@PrimaryName ,
@ERROR
)
和:
insert into Process_Log
(
PrimaryName ,
ERROR
) VALUES
(
@PrimaryName ,
REPLACE(@ERROR, '''', '''''')
)
这不会更改错误消息,只是“转义”单引号,以便 SQL Server 不会混淆。
您还需要摆脱这QUOTED_IDENTIFIER
一位并忘记双引号。
我开始认为这不是 SQL Server,因为您在下面的评论中添加的“东西”肯定不是我所知道的 SQL……如果我尝试运行它,它不会做任何事情SSMS。
尝试这个:
DECLARE @test TABLE (error VARCHAR(MAX));
--Doesn't work due to single quotes
--INSERT INTO @test SELECT '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.';
INSERT INTO @test SELECT '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.';
SELECT * FROM @test;
推荐阅读
- android - 浮动动作按钮动画仅在第一次单击时起作用
- node.js - Express with Serverless 的目的
- regex - ack:在提供正则表达式时转义单引号
- javascript - 未调用 Firestore 触发器
- django - django 使用 AbstractUser 删除模型中不需要的用户字段
- html - HTML 根据屏幕调整字体大小
- algorithm - 使用二进制 GCD 算法确定朴素 GCD 算法中所需的减法数
- javascript - NodeJS POST请求正文字符串不匹配
- azure - PS Azure Web App 异常调用带有“2”参数的“UploadFile”:“无法将 Content-Type 标头设置为此请求的多部分类型
- simics - 如何从 CLI 安装 Intel Simics?