بررسی تنظیمات SET فعال سشن جاری در SQL Server: راهنمای جامع
هنگام کار با SQL Server، اغلب نیاز است که مطمئن شوید گزینههای SET خاصی برای یک نشست فعال یا غیرفعال هستند. این امر برای رفتار ثابت، به خصوص هنگام کار با برنامههای قدیمی، سرورهای لینکشده یا وظایف خاص دستکاری دادهها، حیاتی است.
برای مثال، برخی از برنامهها به مجموعهای از گزینههای SET نیاز دارند که به صورت خاص فعال باشند. یکی از این مجموعهها، گزینههایی مانند ANSI_NULLS، ANSI_PADDING، ANSI_WARNINGS، CONCAT_NULL_YIELDS_NULL و QUOTED_IDENTIFIER هستند که به طور معمول در وضعیت ON قرار میگیرند.
SET ANSI_NULLS ON, SET ANSI_PADDING ON, SET ANSI_WARNINGS ON, SET CONCAT_NULL_YIELDS_NULL ON, SET QUOTED_IDENTIFIER ON
این تنظیمات، رفتار SQL Server را در مورد مقادیر NULL، پر کردن رشتهها، هشدارها و … کنترل میکنند.
استفاده از متغیر سراسری @@OPTIONS
SQL Server متغیر سراسری @@OPTIONS را ارائه میدهد که یک مقدار صحیح را برمیگرداند. این مقدار صحیح نشاندهنده گزینههای SET فعال فعلی برای نشست است. هر گزینه SET به یک بیت خاص در این عدد صحیح مربوط میشود.
برای بازیابی مقدار @@OPTIONS از دستور زیر استفاده کنید:
SELECT @@OPTIONS
این دستور یک عدد صحیح را برمیگرداند که مجموع مقادیر بیتی گزینههای SET فعال است. اگر این کوئری مثلاً 256 را برگرداند، به این معنی است که ترکیب خاصی از گزینههای SET فعال است. برای تفسیر آن، باید مقادیر بیتی مرتبط با هر گزینه SET را درک کنید.
گزینههای SET رایج و مقادیر بیتی آنها به شرح زیر است:
- گزینه SET ANSI_NULLS ON دارای مقدار بیتی 32 است.
- گزینه SET ANSI_PADDING ON دارای مقدار بیتی 16 است.
- گزینه SET ANSI_WARNINGS ON دارای مقدار بیتی 8 است.
- گزینه SET ARITHABORT ON دارای مقدار بیتی 2 است.
- گزینه SET CONCAT_NULL_YIELDS_NULL ON دارای مقدار بیتی 4 است.
- گزینه SET QUOTED_IDENTIFIER ON دارای مقدار بیتی 256 است.
- گزینه SET NUMERIC_ROUNDABORT ON دارای مقدار بیتی 1 است.
- گزینه SET XACT_ABORT ON دارای مقدار بیتی 64 است.
- گزینه SET IMPLICIT_TRANSACTIONS ON دارای مقدار بیتی 128 است.
مثال تفسیر @@OPTIONS: اگر @@OPTIONS مقدار 256 را برگرداند، به این معنی است که SET QUOTED_IDENTIFIER ON فعال است. اگر 260 را برگرداند، به این معنی است که هر دو SET QUOTED_IDENTIFIER ON (256) و SET CONCAT_NULL_YIELDS_NULL ON (4) فعال هستند (256 + 4 = 260).
برای بررسی فعال بودن یک گزینه SET خاص، میتوانید از عملیات بیتی AND استفاده کنید. مثال: برای بررسی QUOTED_IDENTIFIER از این دستور استفاده کنید:
SELECT @@OPTIONS & 256 AS 'QUOTED_IDENTIFIER'
این کوئری 256 را برمیگرداند اگر QUOTED_IDENTIFIER فعال باشد و 0 را اگر غیرفعال باشد.
برای بررسی همزمان چندین گزینه، میتوانید از مثال زیر استفاده کنید:
DECLARE @options int
SET @options = @@OPTIONS
SELECT @options & 256 AS 'QUOTED_IDENTIFIER',
@options & 4 AS 'CONCAT_NULL_YIELDS_NULL',
@options & 32 AS 'ANSI_NULLS'
استفاده از نمای مدیریت دینامیک sys.dm_exec_sessions
در حالی که @@OPTIONS مفید است، sys.dm_exec_sessions یک روش جامعتر و خواناتر برای مشاهده گزینههای SET برای نشست فعلی و سایر نشستهای فعال ارائه میدهد. این DMV (نمای مدیریت دینامیک) ویژگیهای مختلف نشست را برمیگرداند، از جمله ستونهای خاص برای هر گزینه SET.
برای استفاده از sys.dm_exec_sessions، میتوانید کوئری زیر را اجرا کنید:
SELECT * FROM sys.dm_exec_sessions WHERE session_id = @@SPID
این کوئری یک ردیف برای نشست فعلی شما برمیگرداند، با ستونهایی مانند ansi_nulls، ansi_padding، ansi_warnings، arithabort، quoted_identifier و غیره که 1 برای فعال و 0 برای غیرفعال را نشان میدهند.
مزایای sys.dm_exec_sessions:
- خوانایی: نام ستونها خودتوضیح هستند.
- جامعیت: بیش از فقط گزینههای مرتبط با بیتها را نشان میدهد.
- دامنه نشست: میتوان نشستهای دیگر را بر اساس session_id کوئری زد.
- عدم نیاز به منطق بیتی: نیازی به به خاطر سپردن مقادیر بیتی یا انجام عملیات بیتی پیچیده نیست.
مقایسه @@OPTIONS و sys.dm_exec_sessions: در حالی که @@OPTIONS راهی سریع برای به دست آوردن یک عدد صحیح واحد برای نمایش گزینههای متعدد است، sys.dm_exec_sessions یک رویکرد دقیقتر، خواناتر و با خطای کمتر، به ویژه برای اشکالزدایی یا حسابرسی، ارائه میدهد.