我建立了视图,在视图里添加了索引,但是在存储过程里更新表却出现错误

ycc2008 2005-01-06 12:58:15
UPDATE 失败,因为下列 SET 选项的设置不正确: 'ANSI_NULLS., QUOTED_IDENTIFIER, ARITHABORT'。
我该怎么设置呀
...全文
226 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
我把连接的Arithmetic abort的勾打上就好了,但是用存储过程的语句实现就是不行啊,弄了一天了,帮帮我吧。。。。
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
兄弟,不行啊,前面放这个,执行后在存储过程里面根本没有下面这段呀,错误还是照样。。。。
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
go
。。。。。
zjcxc 元老 2005-01-06
  • 打赏
  • 举报
回复
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
go

CREATE PROCEDURE [UpdateSmallYellowPageClass]
(
@id int,
@classname nvarchar(25),
@classid int,
@sortid int
)
AS
SET NOCOUNT ON

IF EXISTS(SELECT 1 FROM SmallYellowPageClass WHERE smallclassname=@classname AND classid=@classid AND smallclassid<>@id)
RETURN 1
ELSE
BEGIN
UPDATE SmallYellowPageClass SET smallclassname=@classname,classid=@classid,sortid=@sortid WHERE smallclassid=@id
RETURN @@ERROR
END


GO

ycc2008 2005-01-06
  • 打赏
  • 举报
回复
这个是视图
CREATE VIEW dbo.v_YellowPageClass
WITH SCHEMABINDING
AS
SELECT dbo.YellowPageClass.classname, dbo.SmallYellowPageClass.smallclassid,
dbo.SmallYellowPageClass.smallclassname, dbo.SmallYellowPageClass.classid,
dbo.SmallYellowPageClass.sortid
FROM dbo.YellowPageClass INNER JOIN
dbo.SmallYellowPageClass ON
dbo.YellowPageClass.classid = dbo.SmallYellowPageClass.classid
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
CREATE PROCEDURE [UpdateSmallYellowPageClass]
(
@id int,
@classname nvarchar(25),
@classid int,
@sortid int
)
AS
SET NOCOUNT ON
SET ANSI_NULLS ON
SET ARITHABORT ON

IF EXISTS(SELECT 1 FROM SmallYellowPageClass WHERE smallclassname=@classname AND classid=@classid AND smallclassid<>@id)
RETURN 1
ELSE
BEGIN
UPDATE SmallYellowPageClass SET smallclassname=@classname,classid=@classid,sortid=@sortid WHERE smallclassid=@id
RETURN @@ERROR
END


GO
zjcxc 元老 2005-01-06
  • 打赏
  • 举报
回复
在查询分析器中执行的语句帖出来
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
up
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
大侠你好,我删除了存储过程,然后在查询分析器中执行下面的,然后在程序中执行存储过程,现在提示:UPDATE 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'。
我把这个ARITHABORT设置成ON也不管用呀
SET NOCOUNT ON
SET ANSI_NULLS ON
SET ARITHABORT ON ------------有没有这句都提示因为下列 SET 选项的设置不正确: 'ARITHABORT'
UPDATE SmallYellowPageClass SET smallclassname=@classname,classid=@classid,sortid=@sortid WHERE smallclassid=@id
RETURN @@ERROR
long_205 2005-01-06
  • 打赏
  • 举报
回复
在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样.
zjcxc 元老 2005-01-06
  • 打赏
  • 举报
回复
1.设置仅在处理的过程中有效

2.如果你的语句是在存储过程(视图/自定义函数/触发器)中,那是由创建存储过程时的设置决定的,这种情况下,要删除存储过程,在查询分析器中执行创建存储过程的语句才行
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
SET NOCOUNT ON
SET ANSI_NULLS ON
UPDATE SmallYellowPageClass SET smallclassname=@classname,classid=@classid,sortid=@sortid WHERE smallclassid=@id
RETURN @@ERROR
怎么还错呢,是不是几个set选项都要设置呀
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
--直接在处理语句前加上就行了

SET ANSI_NULLS ON
UPDATE ...
这个好,谢谢,UPDATE完毕后是否要SET ANSI_NULLS OFF呢?
mschen 2005-01-06
  • 打赏
  • 举报
回复
原因:在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样.
zjcxc 元老 2005-01-06
  • 打赏
  • 举报
回复
--直接在处理语句前加上就行了

SET ANSI_NULLS ON
UPDATE ...

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧