2010-03-20 35 views
6

NULL veya int değeri olabilecek bir değer gönderen bu yordamı çağırmak istiyorum.SET ANSI_NULLS AÇIK veya KAPALI ile nasıl baş edilir?

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

Sadece şu kodda şu anda yaptığım şeyden ziyade bu tek sorguyu kullanmak istiyorum.

Ben this Link var ben o zaman bunu nasıl bu aradık.

Ben ANSI_NULLS KAPALI

ayarlamak zorunda Buna göre benim sql sorgusu çalıştırmadan önce bu prosedür içinde bu ayarlayın ve sonra bu yaptıktan sonra tekrar sıfırlamak mümkün değilim.

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 

Ne ANSI_NULLS ile anlaşma veya Else

cevap

8

SET ANSI_NULLS orada düzenlemek ve AÇIK veya KAPALI olarak ayarlayın ve değiştirmek güncelleyebilirsiniz ony oluşturmak proc depolanan zamanda tanımlanır ve çalışma zamanında ayarlanamaz. SET Seçenekler

Database Engine Kullanarak

From CREATE PROC

ayarları hem SET QUOTED_IDENTIFIER ait kaydeder ve bir Transact-SQL prosedür oluşturulmuş veya değiştirilmiş saklandığında ANSI_NULLS SET. Bu orijinal ayarlar, saklı yordam yürütüldüğünde kullanılır. saklı yordamı çalışırken nedenle, herhangi bir istemci oturum ayarları SET QUOTED_IDENTIFIER ve set ANSI_NULLS için dikkate alınmaz. SET ARITHABORT, SET ANSI_WARNINGS veya SET ANSI_PADDINGS gibi diğer SET seçenekleri, saklı yordam oluşturulduğunda veya değiştirildiğinde kaydedilmez. Kayıtlı yordamın mantığı , belirli bir özel ayarına bağlıysa, uygun ayarını garanti etmek için prosedürünün başlangıcında bir SET bildirimi ekleyin. Bir SET deyimi, saklı yordamdan çalıştırılan olduğunda, ayarı, saklı yordamının çalışmasını tamamlayana kadar geçerli kalır.Ayar geri yüklendiğinde saklı yordamın çağrıldığı zaman değerine geri yüklenir. Bu, münferit istemcilerin, saklı yordamın mantığını etkilemeden istedikleri seçeneklerini ayarlamak için etkinleştirir. SET ANSI_NULLS gelecekte AÇIK olacak çünkü

aynı Bu durumda SET QUOTED_IDENTIFIER

için geçerlidir, EĞER BAŞKA kullanın. Veya Peter Lang'ın önerisi. , Çözüm için thx halen i ur çözeltisinden egzersiz yapacaktır: @SubDomainId NULL gerçekten doğru kullanımı değil NULL olduğunda

... çalışmak SubDomainId = @SubDomainId bekliyor

+0

@ gbn thx. –

2

tek bir sorgu kullanamazsınız Eğer Kullanarak yapacak daha iyi bir uygulama olacak?

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

@Peter Lang Dürüst olmak gerekirse. Ama yine de ANSI_NULLS için soru açık. –

0

Bilginize, ben/düzenlemek oluşturduğunuzda

ANSI_NULLS OFF 

o prosedürün bir ayar gibi, prosedür için geçerlidir ... eminim.

Yani ya prosedür veya kapatın vardır. Örneğiniz bir sorgulama değildi, bu yüzden biraz kafam karıştı.

Ama yeni bir sekmede prosedürü açılır "Düzenleme" prosedürü eğer örneğin SQL 2005/2008 varsa KAPALI üstüne yakın ANSI_NULLS göreceksiniz.

Sen ...

+0

Not, bu ayarı da bir sorguda kullanabilirsiniz ... Sadece bir prosedürle nasıl çalıştığını söylüyorum. –

+0

Sorguyla kullanmaya çalışıyorum. Prosedür için iyi çalışıyorum, eğer prosedürü KAPALI yaparsam. Ama sadece Sorgu için KAPALI yapmak istiyorum. Herhangi bir öneri ? Oldukça iyi bir açıklama sağlamak için –

İlgili konular