SQL Server - 使用带引号的标识符 ON 和 OFF 以及 Getdate()

发布于 2024-11-05 01:26:12 字数 841 浏览 0 评论 0原文

我的脚本 SQL 有问题,请帮助我。

例如:

我有一个插入语句:

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

当我执行此插入时,返回以下消息:

“消息 1934,级别 16,状态 1,服务器 HENRIQUE-PC,第 5 行插入失败 因为以下 SET 选项有 不正确的设置:'QUOTED _IDENTIFIER'。验证 SET 选项是否正确用于 索引视图和/或索引 计算列和/或过滤列 索引和/或查询通知 和/或 XML 数据类型方法和/或 空间索引操作。”。

现在,当我使用 SET QUOTED_IDENTIFIER ON 时,我的插入成功执行。

例如:

SET QUOTED_IDENTIFIER OFF
GO

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

SET QUOTED_IDENTIFIER ON
GO

(1 行受影响)

GETDATE()QUOTED IDENTIFIER 之间有什么关系?

为什么在这种情况下我需要使用QUOTED IDENTIFIER

我相信这是因为 getdate 。为什么?

谢谢。

恩里克·梅利西奥

I have a problem with my script SQL, please help me.

Ex:

I have a insert statments:

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

When I execute this insert, retuns the follow message:

"Msg 1934, Level 16, State 1, Server
HENRIQUE-PC, Line 5 INSERT failed
because the following SET options have
incorrect settings: 'QUOTED
_IDENTIFIER'
. Verify that SET options are correct for use with
indexed views and /or indexes on
computed columns and/or filtered
indexes and/or query notificatio ns
and/or XML data type methods and/or
spatial index operations.".

Now, when I used SET QUOTED_IDENTIFIER ON, my insert is executed with success.

Ex:

SET QUOTED_IDENTIFIER OFF
GO

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

SET QUOTED_IDENTIFIER ON
GO

(1 row(s) affected)

What relationship betwhen GETDATE() and QUOTED IDENTIFIER?

Why I need to use QUOTED IDENTIFIER in this case?

I believe it is because of getdate. Why?

Thanks.

Henrique Melicio

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戏蝶舞 2024-11-12 01:26:12

Henrique,

您收到该错误的原因与 GETDATE() 无关,它与 CUSTOMER 表中列的索引有关。 SQL Server 2008 的 SET 语句 (Transact-SQL) 文档中的这段内容更详细地解释了该问题:

当您创建和操作时
计算列上的索引或索引
视图、SET 选项 ARITHABORT、
CONCAT_NULL_YIELDS_NULL,
QUOTED_IDENTIFIER、ANSI_NULLS、
ANSI_PADDING 和 ANSI_WARNINGS 必须
设置为ON。选项
NUMERIC_ROUNDABORT 必须设置为 OFF。

如果未设置这些选项之一
到所需的值,插入,
更新、删除、DBCC CHECKDB 和 DBCC
对索引视图执行 CHECKTABLE 操作或
带有计算索引的表
列将会失败。 SQL Server 将
引发错误,列出所有选项
那些设置不正确的。另外,SQL
服务器将处理 SELECT 语句
在这些表或索引视图上,就像
计算列或上的索引
该视图不存在。

Henrique,

The reason you're getting that error is not related to GETDATE(), it has to do with indexes on columns from your CUSTOMER table. This bit from SQL Server 2008's SET Statements (Transact-SQL) document explains the issue in more detail:

When you are creating and manipulating
indexes on computed columns or indexed
views, the SET options ARITHABORT,
CONCAT_NULL_YIELDS_NULL,
QUOTED_IDENTIFIER, ANSI_NULLS,
ANSI_PADDING, and ANSI_WARNINGS must
be set to ON. The option
NUMERIC_ROUNDABORT must be set to OFF.

If any one of these options is not set
to the required values, INSERT,
UPDATE, DELETE, DBCC CHECKDB and DBCC
CHECKTABLE actions on indexed views or
tables with indexes on computed
columns will fail. SQL Server will
raise an error listing all the options
that are incorrectly set. Also, SQL
Server will process SELECT statements
on these tables or indexed views as if
the indexes on computed columns or on
the views do not exist.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文