[英]How to Deal with SET ANSI_NULLS ON or OFF?
我想調用此過程發送一個可以為NULL或任何int值的值。
SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId =@SubDomainId
我只是想使用這個單一的查詢,而不是現在我正在做的下面給出的代碼。
我搜索了這個怎么能這樣做然后我得到了這個鏈接 。
根據這個,我必須設置ANSI_NULLS OFF
在執行我的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或使用If Else更好的做法是什么
SET ANSI_NULLS在存儲過程創建時定義,不能在運行時設置。
使用SET選項
創建或修改Transact-SQL存儲過程時,數據庫引擎會保存SET QUOTED_IDENTIFIER和SET ANSI_NULLS的設置。 執行存儲過程時使用這些原始設置。 因此,存儲過程運行時,將忽略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將來會打開 。
或者Peter Lang的建議。
老實說,當@SubDomainId為NULL時,期望SubDomainId = @SubDomainId
工作並不是真正正確使用NULL ...
你不能使用單個查詢嗎?
SELECT DomainName, DomainCode
FROM Tags.tblDomain
WHERE ( @SubDomainId IS NULL AND SubDomainId IS NULL )
OR ( SubDomainId = @SubDomainId )
僅供參考,我很確定......
ANSI_NULLS OFF
在創建/編輯它時適用於該過程,它類似於過程的設置。
因此,程序要么打開,要么關閉。 你的例子是查詢而不是程序,所以我有點困惑。
但是,如果您有SQL 2005/2008,例如,如果您“編輯”過程,它會在新選項卡中打開您的過程,您將在頂部附近看到ANSI_NULLS OFF。
您可以在那里編輯並將其設置為ON或OFF並更新它以更改...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.