Ao executar o proc1, estou recebendo o erro abaixo:
UPDATE falhou porque as seguintes opções SET têm configurações incorretas: 'ANSI_WARNINGS'. Verifique se as opções SET estão corretas para uso com exibições indexadas e/ou índices em colunas computadas e/ou índices filtrados e/ou notificações de consulta e/ou métodos de tipo de dados XML e/ou operações de índice espacial.
Eu sei que isso está acontecendo porque estou tendo um índice filtrado na tabela do cliente e isso requer SET ANSI_WARNINGS ON.
Ainda precisamos ter algumas opções ANSI que precisam ser cuidadas ao criar índice filtrado e proc armazenado. Eu lidei com essas coisas.
E consertei o problema definindo ansi_warning em proc1, que é a solução ideal.
Mas minha pergunta é, mesmo depois de definir todas as opções ANSI necessárias no proc2, por que estou recebendo esse erro? Qualquer ideia?
Abaixo está o meu código de exemplo:
create Customers
(
id int,
name varchar(100),
[Stats] BIT NOT NULL DEFAULT 1,
)
go
CREATE NONCLUSTERED INDEX [IX_Customers_Stats]
ON [dbo].[Customers]([Stats])
WHERE [Stats] = 0
go
CREATE PROC proc1
as
BEGIN
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
....
...
.. some code .....
....
...
EXEC proc2 @customerId
END
go
createPROCEDURE [dbo].[proc2 ]
@customerId INT
AS
BEGIN
SET ANSI_WARNINGS ON;
SET ANSI_NULLS ON;
SET ANSI_PADDING ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT ON;
SET QUOTED_IDENTIFIER ON;
UPDATE dbo.Customers set Stats = 0 where id = @CustomerId
END
Possivelmente porque ( fonte ):
Em qualquer caso, você pode contornar isso de duas maneiras:
No meu caso, foi causado por um índice filtrado
A solução foi mudar
ANSI_WARNINGS OFF
paraLEFT(column, length)
.