خانه/ برنامه‌نویسی در SQL Server/ متغیرها

متغیرها: نگه‌داشتن یک مقدار موقت داخل اسکریپت

مبتدی ۱۰ دقیقه مطالعه

در Stored Procedureها با پارامترهایی مثل @City آشنا شدیم. همان نماد @ برای متغیرها هم استفاده می‌شود — جایی برای نگه‌داشتن یک مقدار موقت، وسط یک اسکریپت SQL، بدون نیاز به رویه یا تابع.

ساختار پایه در SQL Server

sql
DECLARE @MinGrade INT;
SET @MinGrade = 10;

SELECT full_name, grade
FROM students
WHERE grade >= @MinGrade;

DECLARE متغیر را با یک نوع داده تعریف می‌کند، و SET مقداری در آن می‌گذارد. از این به بعد، هرجای اسکریپت که @MinGrade بیاید، همان مقدار جایگزین می‌شود.

نکته‌ی مهم: SQLite هیچ نحو DECLARE/SET برای متغیر ندارد — این کاملاً مخصوص T-SQL (زبان SQL Server) است. اما یک ترفند رایج وجود دارد: استفاده از یک جدول موقت تک‌ردیفی به‌جای متغیر.

ترفند SQLite: جدول موقت به‌جای متغیر

یک جدول با یک ستون و یک ردیف، می‌تواند نقش همان متغیر را بازی کند — و این‌بار واقعاً قابل‌اجراست:

امتحانش کن — شبیه‌سازی متغیر با جدول موقت
حالا کافی است فقط عدد داخل INSERT INTO var_min_price VALUES (...) را عوض کنی تا آستانه‌ی فیلتر تغییر کند — بدون این‌که مجبور باشی خودِ شرط WHERE price > val را پیدا و ویرایش کنی. دقیقاً همان فایده‌ی یک متغیر.

متغیر برای شمارش و جمع‌بندی هم به‌کار می‌آید

در SQL Server، متغیرها معمولاً برای نگه‌داشتن نتیجه‌ی یک محاسبه‌ی میانی هم استفاده می‌شوند:

sql
DECLARE @TotalRevenue INT;

SELECT @TotalRevenue = SUM(price * quantity)
FROM sales;

SELECT @TotalRevenue AS Total;

جمع‌بندی این درس

  • DECLARE @name TYPE; یک متغیر تعریف می‌کند؛ SET مقدار می‌دهد.
  • متغیرها برای نگه‌داشتن آستانه‌های فیلتر یا نتیجه‌ی محاسبات میانی به‌کار می‌روند.
  • SQLite معادل مستقیمی ندارد؛ یک جدول موقت تک‌ردیفی می‌تواند همان نقش را بازی کند.

در آخرین درس این فصل، همان جدول‌های موقت را با جزئیات کامل می‌بینیم.

تمرین‌های خودآزمایی

اول خودت جواب بده، بعد پاسخ را باز کن و مقایسه کن.

۱یک متغیر عددی تعریف کن، مقدار ۵ بده و دو برابرش را نمایش بده.نمایش پاسخ
پاسخ
DECLARE @n INT = 5;
SELECT @n * 2 AS doubled;
۲دامنه‌ی (Scope) یک متغیر محلی تا کجاست؟نمایش پاسخ
پاسخ

فقط تا پایان همان Batch (تا اولین GO) یا همان Procedure/Function.