Сегодня я столкнулся с интересной проблемой. Я изменял хранимую процедуру и помещал оператор выбора в самый конец. Это должно было быть временным и просто для работы с данными. Позже я был удивлен, узнав, что этот оператор был сохранен и выполнялся при каждом запуске SP.
SET ANSI_NULLS ON
GO
-- Comments usually go here and are saved as part of the SP
ALTER PROCEDURE [dbo].[MySP]
@param INT
AS
BEGIN
--Your normal SQL statements here
END
--You can also add SQL statements here
select * from LargeTable
--You have access to the params
select @param
Имеет смысл, что все сохраняется, а не только то, что находится внутри BEGIN / END, в противном случае комментарии и SET ANSI_NULLS
и др. исчезнет. Я немного запутался в том, что где начинается, поэтому у меня есть несколько вопросов:
SET ANSI_NULLS
сохраняется как часть SP. Я подтвердил, что каждый SP имеет свою ценность. Откуда SQL Server знает, что нужно сохранить это как часть SP, если на него раньше не ссылались? Выполняется ли полное сканирование текущего состояния среды, а затем, когда ALTER PROCEDURE
выполняется, он сохраняет состояние (возможно, только значения, отличные от значений по умолчанию)?