📚 فصل ۱۳ — وارد کردن داده‌ها در جداول (INSERT) در SQL Server

""

1️⃣ مقدمه — چرا باید درج داده‌ها را اصولی بلد باشیم؟

تا الان شما یاد گرفتید که:

  • پایگاه داده چیست
  • جداول چگونه ساخته می‌شوند
  • کلید اصلی و خارجی چه نقشی دارند

حالا وقتش رسیده داده‌ها رو به این جداول اضافه کنیم.
درج داده یکی از پرکاربردترین عملیات در زندگی واقعی است، چون در هر سیستمی:

  • مشتری‌ها ثبت‌نام می‌کنند
  • سفارش‌ها اضافه می‌شن
  • محصولات وارد انبار می‌شن

💡 جملۀ کلیدی:
اگر درج داده اصولی نباشه، پایگاه داده شما سریع نامعتبر، غیرقابل اعتماد و ناکارآمد میشه.


2️⃣ دستور پایه INSERT — ساختار کلی

فرمت استاندارد INSERT به این صورت است:

INSERT INTO TableName (Column1, Column2, Column3, ...)
VALUES (Value1, Value2, Value3, ...);
  • TableName → اسم جدول هدف
  • Column1, Column2, … → اسم ستون‌هایی که می‌خوای مقداردهی کنی
  • VALUES → مقادیر به همان ترتیب ستون‌ها

📌 نکته مهم:
ترتیب ستون‌ها و مقادیر باید یکسان باشد.


3️⃣ وارد کردن داده‌ها در تمام ستون‌ها

اگر بخواهیم مقدار همه ستون‌ها (به جز ستون‌هایی که IDENTITY خودکار مقدار می‌گیرند) را پر کنیم:

CREATE TABLE Customers (
    CustomerID INT,
    FullName NVARCHAR(100),
    City NVARCHAR(50)
);

INSERT INTO Customers (CustomerID, FullName, City)
VALUES (1, N'علی محمدی', N'تهران');

📌 چرا از N قبل از متن استفاده کردیم؟
چون ستون ما NVARCHAR است و داده فارسی داریم، باید مشخص کنیم که رشته Unicode است.


4️⃣ وارد کردن داده‌ها فقط در ستون‌های خاص

اگر یک ستون مقدار پیش‌فرض دارد یا اجباری نیست، می‌توانیم آن را در درج مقدار نیاوریم.

CREATE TABLE Products (
    ProductID INT,
    ProductName NVARCHAR(100),
    Price DECIMAL(10,2) DEFAULT 0
);

INSERT INTO Products (ProductID, ProductName)
VALUES (101, N'کیبورد مکانیکی');

ستون Price اینجا مقدار پیش‌فرض 0 می‌گیرد.


5️⃣ وارد کردن چندین رکورد در یک دستور

برای درج چند رکورد:

INSERT INTO Customers (CustomerID, FullName, City)
VALUES 
(2, N'مریم احمدی', N'اصفهان'),
(3, N'رضا قاسمی', N'مشهد'),
(4, N'سمیه شریفی', N'شیراز');

📌 این روش سریع‌تر از اجرای چندین دستور جداگانه است.


6️⃣ درج داده‌ها بدون ذکر ستون‌ها (خطرناک!)

INSERT INTO Customers
VALUES (5, N'حسین رستمی', N'تبریز');

📛 هشدار: اگر ترتیب یا تعداد ستون‌های جدول تغییر کند، این دستور خطا می‌دهد یا داده اشتباه درج می‌شود. بهتر است همیشه نام ستون‌ها را ذکر کنید.


7️⃣ درج با ترتیب متفاوت ستون‌ها

اگر ترتیب ستون‌ها را تغییر بدهید، VALUES هم باید دقیقاً هماهنگ باشد:

INSERT INTO Customers (FullName, City, CustomerID)
VALUES (N'عاطفه نوری', N'یزد', 6);

این کار درست است چون ترتیب ستون‌ها را خودمان مشخص کردیم.


8️⃣ نکات مهم هنگام درج داده‌ها

  • استفاده از N پیش از رشته‌های فارسی (N'متن')
  • همخوانی تعداد ستون‌ها با تعداد مقادیر
  • رعایت نوع داده (Data Type Match)
  • توجه به ستون‌های IDENTITY (خودکار مقدار می‌گیرند و نباید در INSERT بیایند، مگر با SET IDENTITY_INSERT ON)
  • استفاده از DEFAULT برای مقادیر پیش‌فرض

9️⃣ خطاهای رایج و دلایل آن‌ها

❌ مقدار NULL در ستون NOT NULL:

INSERT INTO Customers (CustomerID, FullName) VALUES (7, NULL);

خطا: “Cannot insert the value NULL into column ‘FullName’…”


❌ مقدار ناهمخوان با Data Type:

INSERT INTO Customers (CustomerID, FullName) VALUES ('متن', N'سارا رفیعی');

خطا: چون ستون CustomerID عددی است.


❌ نقض محدودیت کلید خارجی:

INSERT INTO Orders (OrderID, CustomerID) VALUES (1, 99);

اگر مشتری با ID=99 وجود نداشته باشد، درج انجام نمی‌شود.


🔟 درج مقادیر پیش‌فرض (DEFAULT)

CREATE TABLE Sales (
    SaleID INT,
    SaleDate DATE DEFAULT GETDATE()
);

INSERT INTO Sales (SaleID) VALUES (1);

ستون SaleDate اتومات با تاریخ امروز پر می‌شود.

همچنین می‌توانید استفاده کنید:

INSERT INTO Sales (SaleID, SaleDate) VALUES (2, DEFAULT);

1️⃣1️⃣ درج داده‌ها با استفاده از نتایج SELECT (Insert-Select)

این روش برای کپی یا انتقال داده‌ها مفید است.

مثال:

CREATE TABLE ArchivedCustomers (
    CustomerID INT,
    FullName NVARCHAR(100),
    City NVARCHAR(50)
);

INSERT INTO ArchivedCustomers (CustomerID, FullName, City)
SELECT CustomerID, FullName, City
FROM Customers
WHERE City = N'تهران';

📌 نتیجه: همه مشتریان تهران به جدول آرشیو منتقل می‌شوند.


1️⃣2️⃣ تمرین عملی

تمرین ۱: یک جدول Students بسازید با ستون‌های:

  • StudentID (INT, Primary Key)
  • FullName (NVARCHAR(100))
  • BirthDate (DATE)

و 5 دانشجو وارد کنید.


تمرین ۲: از جدول Customers، تمام مشتریان مشهد را به یک جدول جدید به نام MashhadCustomers منتقل کنید.


1️⃣3️⃣ جمع‌بندی

در این فصل یاد گرفتیم:

  • دستور پایه INSERT
  • روش‌های مختلف درج داده
  • مشکلات رایج و راه‌حل‌ها
  • استفاده از مقادیر پیش‌فرض
  • کپی داده‌ها با INSERT SELECT
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *