"

راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server,چرا تغییرات جدول در SQL Server ذخیره نمی‌شود؟,خطای Saving changes is not permitted چیست؟

راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server

راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server؛ بررسی خطاهای SSMS، Table Designer، تراکنش و تنظیمات ذخیره جدول.

تیم تحریریه
6
0
26 مرداد 1405
لینک کوتاه

راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server

یکی از مشکلاتی که کاربران هنگام کار با SQL Server و SQL Server Management Studio (SSMS) با آن مواجه می‌شوند، ذخیره نشدن تغییرات بعد از ایجاد یا ویرایش جدول است.
ممکن است یک ستون جدید اضافه کنید، نوع داده را تغییر دهید یا ساختار جدول را ویرایش کنید، اما هنگام ذخیره با خطا مواجه شوید یا تغییرات در دیتابیس نمایش داده نشوند.
این مشکل معمولاً به تنظیمات Table Designer، سطح دسترسی کاربر، تراکنش‌های باز یا نوع تغییر ایجادشده مربوط است.
یکی از رایج‌ترین خطاها نیز پیام Saving changes is not permitted است.



راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server

چرا تغییرات جدول در SQL Server ذخیره نمی‌شود؟

ذخیره نشدن تغییرات جدول می‌تواند دلایل مختلفی داشته باشد.
برای مثال، گاهی SSMS برای اعمال یک تغییر مجبور است جدول را حذف و دوباره ایجاد کند.
در چنین شرایطی تنظیمات پیش‌فرض SSMS ممکن است مانع ذخیره تغییرات شود.
از طرف دیگر، ممکن است کاربر مجوز لازم برای تغییر جدول را نداشته باشد یا تغییرات داخل یک Transaction انجام شده باشند و هنوز COMMIT نشده باشند.
همچنین در برخی موارد جدول ایجاد شده اما در Object Explorer نمایش داده نمی‌شود و کاربر تصور می‌کند که جدول ذخیره نشده است.

خطای Saving changes is not permitted چیست؟

یکی از رایج‌ترین پیام‌های خطا در SSMS به شکل زیر است:

Saving changes is not permitted.
The changes that you have made require the following tables to be dropped and re-created.

این خطا معمولاً زمانی نمایش داده می‌شود که تغییر موردنظر از طریق Table Designer نیازمند بازسازی جدول باشد.
برای نمونه، تغییر نوع داده ستون، تغییر وضعیت Allow Nulls، حذف ستون یا تغییر ترتیب بعضی ستون‌ها ممکن است باعث شود Designer برای اعمال تغییر، جدول را دوباره ایجاد کند.
SSMS به‌صورت پیش‌فرض برای جلوگیری از مشکلات احتمالی، ذخیره چنین تغییراتی را مسدود می‌کند.


🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!
این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.
با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

راهکارهای حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL

روش اول؛ استفاده از ALTER TABLE

یکی از بهترین راهکارها این است که به‌جای Table Designer از دستورات T-SQL استفاده کنید.
برای اضافه کردن ستون:
ALTER TABLE Customers
ADD Email NVARCHAR(150);

برای تغییر نوع داده:
ALTER TABLE Customers
ALTER COLUMN Name NVARCHAR(200);

برای حذف ستون:
ALTER TABLE Customers
DROP COLUMN Age;

استفاده از ALTER TABLE باعث می‌شود تغییر ساختاری به‌صورت مستقیم و کنترل‌شده انجام شود و در بسیاری از مواقع دیگر با محدودیت Table Designer روبه‌رو نشوید.

روش دوم؛ غیرفعال کردن Prevent saving changes

اگر ترجیح می‌دهید از محیط گرافیکی SSMS استفاده کنید، می‌توانید تنظیم مربوط به جلوگیری از ذخیره تغییرات را بررسی کنید.
در SSMS به مسیر زیر بروید:

Tools → Options → Designers → Table and Database Designers

سپس گزینه:

Prevent saving changes that require table re-creation

را پیدا کنید.
با غیرفعال کردن این گزینه، SSMS اجازه می‌دهد برخی تغییراتی که به بازسازی جدول نیاز دارند ذخیره شوند.
با این حال، خاموش کردن این گزینه همیشه بهترین راهکار نیست؛ زیرا بازسازی جدول در برخی شرایط می‌تواند خطراتی برای داده‌ها و تنظیمات جدول ایجاد کند. برای تغییرات مهم بهتر است از دستورات T-SQL استفاده شود.

روش سوم؛ بررسی دیتابیس انتخاب‌شده

گاهی مشکل از ذخیره نشدن تغییرات نیست، بلکه Query روی دیتابیس اشتباه اجرا شده است.
برای بررسی دیتابیس فعلی از این دستور استفاده کنید:

SELECT DB_NAME() AS CurrentDatabase;

نام دیتابیس را با دیتابیسی که انتظار دارید مقایسه کنید.
اگر جدول را در یک دیتابیس ساخته باشید اما در Object Explorer دیتابیس دیگری را بررسی کنید، طبیعی است که تغییرات موردنظر را مشاهده نکنید.

روش چهارم؛ بررسی سطح دسترسی

برای ایجاد یا تغییر جدول، کاربر باید دسترسی‌های لازم را داشته باشد.
داشتن مجوز مشاهده اطلاعات به این معنی نیست که کاربر اجازه تغییر ساختار جدول را نیز دارد.
اگر هنگام ذخیره تغییرات با خطاهای مربوط به Permission مواجه شدید، سطح دسترسی حساب کاربری و مجوزهای مربوط به Schema و جدول را بررسی کنید.
در محیط‌های سازمانی نیز ممکن است مدیر دیتابیس اجازه تغییر ساختار را فقط به کاربران خاصی داده باشد.

روش پنجم؛ بررسی Transaction

یکی دیگر از دلایل احتمالی، باز بودن یک Transaction است.
برای مثال:
BEGIN TRANSACTION;
CREATE TABLE Products
(
    Id INT PRIMARY KEY,
    Name NVARCHAR(100)
);

در چنین حالتی باید تراکنش را تعیین تکلیف کنید:

COMMIT TRANSACTION;
یا در صورت نیاز:

ROLLBACK TRANSACTION;
همچنین می‌توانید تعداد Transactionهای فعال را بررسی کنید:

SELECT @@TRANCOUNT AS ActiveTransactions;
اگر مقدار خروجی بیشتر از صفر باشد، حداقل یک Transaction در اتصال فعلی باز است.

روش ششم؛ بررسی Implicit Transactions

فعال بودن Implicit Transactions نیز می‌تواند باعث سردرگمی هنگام کار با تغییرات دیتابیس شود.
در این حالت برخی دستورات SQL به‌صورت خودکار یک Transaction ایجاد می‌کنند و تا زمانی که COMMIT یا ROLLBACK انجام نشود، تراکنش باز باقی می‌ماند.
در صورت استفاده از این قابلیت، وضعیت Transaction را بررسی کنید و مطمئن شوید تغییرات در نهایت Commit شده‌اند.

روش هفتم؛ Refresh کردن Object Explorer

ممکن است جدول واقعاً ایجاد شده باشد اما هنوز در SSMS نمایش داده نشود.
در این حالت روی پوشه Tables راست‌کلیک کرده و گزینه Refresh را بزنید.
برای اطمینان بیشتر می‌توانید وجود جدول را با Query بررسی کنید:

SELECT *
FROM sys.tables
WHERE name = 'Customers';

یا:


SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Customers';

اگر جدول در نتیجه Query نمایش داده شد، یعنی جدول در دیتابیس وجود دارد و فقط Object Explorer به‌روزرسانی نشده است.



راهکارهای حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL


بهترین روش ایجاد و تغییر جدول در SQL Server

برای پروژه‌های واقعی، بهتر است تغییرات مهم ساختار دیتابیس را با T-SQL انجام دهید.
برای مثال:
CREATE TABLE Employees
(
    Id INT IDENTITY(1,1) PRIMARY KEY,
    FullName NVARCHAR(150) NOT NULL,
    Email NVARCHAR(200),
    CreatedAt DATETIME2 NOT NULL DEFAULT SYSDATETIME()
);

مزیت این روش این است که Script تغییرات را می‌توان ذخیره و در آینده دوباره اجرا کرد.
همچنین نگهداری Scriptها در سیستم کنترل نسخه مانند Git، مدیریت تغییرات دیتابیس را ساده‌تر می‌کند.



بهترین روش ایجاد و تغییر جدول در SQL Server

مراحل پیشنهادی برای رفع مشکل

اگر تغییرات جدول در SQL Server ذخیره نمی‌شود، این مراحل را به‌ترتیب انجام دهید:
ابتدا متن خطا را بررسی کنید.
اگر خطای Saving changes is not permitted نمایش داده می‌شود، احتمالاً تغییر نیازمند بازسازی جدول است.
در مرحله بعد، تنظیم Prevent saving changes that require table re-creation را بررسی کنید.
سپس مطمئن شوید به دیتابیس صحیح متصل هستید:

SELECT DB_NAME();

بعد سطح دسترسی کاربر را بررسی کنید و در صورت استفاده از Transaction، مقدار زیر را کنترل کنید:

SELECT @@TRANCOUNT;
در نهایت Object Explorer را Refresh کرده و وجود جدول را با sys.tables بررسی کنید.

جمع‌بندی

مشکل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server معمولاً قابل حل است و در بسیاری از موارد به تنظیمات SSMS یا نحوه اعمال تغییر مربوط می‌شود.
اگر خطای Saving changes is not permitted دریافت می‌کنید، ابتدا مشخص کنید که تغییر شما نیازمند Re-create شدن جدول است یا خیر.
استفاده از ALTER TABLE معمولاً روش اصولی‌تری برای تغییر ساختار جدول محسوب می‌شود.
همچنین بررسی دیتابیس انتخاب‌شده، سطح دسترسی کاربر، Transactionهای باز و Refresh کردن Object Explorer می‌تواند مشکل را سریع‌تر مشخص کند.
در پروژه‌های حرفه‌ای بهتر است تغییرات ساختار دیتابیس به‌صورت Scriptهای T-SQL مدیریت شوند تا کنترل بیشتری روی تغییرات داشته باشید و امکان ثبت و تکرار آن‌ها نیز فراهم باشد.

سوالات متداول

چرا تغییرات جدول در SQL Server ذخیره نمی‌شود؟

ممکن است مشکل از Table Designer، Permission، Transaction، انتخاب دیتابیس اشتباه یا نیاز به بازسازی جدول باشد.

خطای Saving changes is not permitted چیست؟

این خطا معمولاً زمانی رخ می‌دهد که SSMS برای اعمال تغییر مجبور به حذف و ایجاد مجدد جدول باشد.

چگونه جدول ایجادشده را در SQL Server پیدا کنیم؟

SELECT *
FROM sys.tables
WHERE name = 'Customers';

آیا استفاده از ALTER TABLE بهتر از Table Designer است؟

برای پروژه‌های حرفه‌ای و تغییرات مهم، استفاده از T-SQL کنترل و قابلیت مدیریت بیشتری فراهم می‌کند.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “راه حل ذخیره نشدن تغییرات بعد از ایجاد جدول در SQL Server” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو