Я хочу назвать эту процедуру, которая отправляет одно значение, которое может быть НУЛЕВЫМ или любое международное значение.
SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId =@SubDomainId
Я просто хочу использовать этот единый запрос, а не в чем я делаю прямо сейчас ниже данного кода.
Я искал это, как я мог сделать это затем, я получил эту Ссылку.
Согласно этому я должен выделить ANSI_NULLS
Я не могу установить эту внутреннюю часть эта процедура прежде, чем выполнить мой запрос SQL и затем сбросить его снова после выполнения этого.
ALTER PROCEDURE [Tags].[spOnlineTest_SubDomainSelect]
@SubDomainId INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF @SubDomainId IS NULL
SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId IS NULL
ELSE
SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId =@SubDomainId
END
Какова будет лучшая практика Еще для заключения сделки с ANSI_NULLS или Используя Если
SET ANSI_NULLS определяется только во время создания сохраненной процедуры и не может быть установлен во время выполнения.
Использование параметров SET
Компонент Database Engine сохраняет настройки как SET QUOTED_IDENTIFIER, так и SET ANSI_NULLS, когда Transact-SQL хранит процедуру создается или изменяется. Эти исходные настройки используются при выполнении хранимой процедуры. Таким образом, любые настройки сеанса клиента для SET QUOTED_IDENTIFIER и SET ANSI_NULLS игнорируются при выполнении хранимой процедуры . Другие параметры SET , такие как SET ARITHABORT, SET ANSI_WARNINGS или SET ANSI_PADDINGS не сохраняются при создании или изменении хранимой процедуры . Если логика хранимой процедуры зависит от конкретного параметра , включите оператор SET в начале процедуры , чтобы гарантировать соответствующий }} параметр. Когда инструкция SET выполняется из хранимой процедуры, параметр остается в силе только до тех пор, пока хранимая процедура не завершит выполнение . Затем параметр восстанавливается до значения, которое хранимая процедура имела при ее вызове. Это позволяет отдельным клиентам устанавливать нужные им параметры , не влияя на логику хранимой процедуры.
То же самое относится к SET QUOTED_IDENTIFIER
. В этом случае используйте IF ELSE, потому что SET ANSI_NULLS будет ON в будущем.
Или предложение Питера Лэнга.
Если честно, ожидать, что SubDomainId = @SubDomainId
будет работать, когда @SubDomainId равно NULL, это не совсем корректное использование NULL ...
К вашему сведению, я почти уверен ...
ANSI_NULLS OFF
Относится к процедуре, когда вы ее создаете / редактируете, это похоже на настройку процедуры.
Значит, у процедуры он включен или выключен. Ваш пример был запросом, а не процедурой, поэтому я немного запутался.
Но если у вас есть SQL 2005/2008, например, если вы «редактируете» процедуру, она откроет вашу процедуру в новой вкладке, вы увидите ANSI_NULLS OFF вверху.
Вы можете отредактировать его там, включить или выключить и обновить, чтобы изменить ...
Разве вы не можете использовать один запрос?
SELECT DomainName, DomainCode
FROM Tags.tblDomain
WHERE ( @SubDomainId IS NULL AND SubDomainId IS NULL )
OR ( SubDomainId = @SubDomainId )