2010-03-20 14 views
6

Quiero llamar a este procedimiento que envía un valor que puede ser NULL o cualquier valor int.¿Cómo lidiar con SET ANSI_NULLS ON u OFF?

SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId [email protected] 

Simplemente quiero utilizar esta única consulta en lugar de lo que estoy haciendo en este momento en el siguiente código.

He buscado esto, ¿cómo puedo hacer esto, entonces tengo this Link.

De acuerdo con esto tengo que fijar ANSI_NULLS OFF

no soy capaz de establecer esto dentro de este procedimiento antes de ejecutar mi consulta SQL y luego reiniciar de nuevo después de hacer esto.

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 [email protected] 
END 

¿Cuál será la mejor práctica de hacer trato con ANSI_NULLS o el uso de Else Si

Respuesta

8

SET es inmejorable definido en proc almacenado crear tiempo y no se puede configurar en tiempo de ejecución.

From CREATE PROC

Uso de las opciones SET

El motor de base guarda la configuración de tanto QUOTED_IDENTIFIER y SET ANSI_NULLS cuando un Transact-SQL almacenado se crea o modifica procedimiento. Estos ajustes originales se usan cuando se ejecuta el procedimiento almacenado al . Por lo tanto, las configuraciones de sesión de cliente para SET QUOTED_IDENTIFIER y SET ANSI_NULLS se ignoran cuando se ejecuta el procedimiento almacenado. Las otras opciones SET , como SET ARITHABORT, SET ANSI_WARNINGS, o SET ANSI_PADDINGS no se guardan cuando se crea o modifica un procedimiento almacenado . Si la lógica del procedimiento almacenado depende de una configuración particular de , incluya una instrucción SET al comienzo del procedimiento para garantizar la configuración apropiada de . Cuando una instrucción SET es ejecutada desde un procedimiento almacenado, la configuración permanece en vigencia solo hasta que el procedimiento almacenado haya finalizado ejecutándose.La configuración se restablece después al valor que el procedimiento almacenado tenía cuando se llamó. Esto permite a los clientes individuales establecer las opciones que deseen sin afectar la lógica del procedimiento almacenado.

Lo mismo se aplica a SET QUOTED_IDENTIFIER

En este caso, utilice SI bien porque SET ANSI_NULLS habrá EN en el futuro.

O la sugerencia de Peter Lang.

Para ser sinceros, esperando SubDomainId = @SubDomainId a trabajar cuando @SubDomainId es NULL no es realmente correcto uso de NULL ...

+0

@gbn thx por proporcionar una explicación bastante buena. –

2

no se puede utilizar una sola consulta?

SELECT DomainName, DomainCode 
FROM Tags.tblDomain 
WHERE (@SubDomainId IS NULL AND SubDomainId IS NULL) 
    OR (SubDomainId = @SubDomainId) 
+0

@Peter Lang: THX para la solución, actualmente voy a entrenar a partir del ur solución. Pero la pregunta todavía está abierta para ANSI_NULLS también. –

0

FYI, estoy bastante seguro ...

ANSI_NULLS OFF 

aplicable al procedimiento al crear/editar él, es como un ajuste del procedimiento.

Por lo tanto, el procedimiento lo tiene activado o desactivado. Tu ejemplo fue una consulta, no un procedimiento, así que estoy un poco confundido.

Pero si tiene SQL 2005/2008, por ejemplo, si "edita" el procedimiento, abre su procedimiento en una nueva pestaña y verá el ANSI_NULLS DESACTIVADO cerca de la parte superior.

Puede editarlo allí y la puso encendido o apagado y actualizarlo para cambiar ... ANSI_NULLS

+0

Tenga en cuenta que también puede usar esa configuración en una consulta ... Solo digo cómo funciona con un procedimiento. –

+0

Estoy tratando de usarlo con consulta. Estoy trabajando bien para el procedimiento, es decir, si lo hago OFF en el procedimiento. Pero quiero hacerlo APAGADO solo para Query. Cualquier sugerencia ? –

Cuestiones relacionadas