Files
boursecu_server/database/sql/_helpers/safe_add_column.sql
T

35 lines
1.7 KiB
SQL

-- =============================================================================
-- الگوی copy/paste برای اضافه کردن امن یک ستون
-- =============================================================================
-- 1) USE دیتابیس
-- 2) @table_name و @column_name و @alter_sql را عوض کنید
-- 3) @after_column اختیاری است — اگر خالی باشد بدون AFTER اضافه می‌شود
-- =============================================================================
SET @db = DATABASE();
SET @table_name = 'products';
SET @column_name = 'show_in_assets';
SET @after_column = 'show';
SET @column_def = 'TINYINT(1) NOT NULL DEFAULT 1 COMMENT ''نمایش در صفحه دارایی‌ها''';
SET @sql = IF(
(SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @table_name) = 0,
CONCAT('SELECT ''skip: table '', @table_name, '' not found'' AS info'),
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @table_name AND COLUMN_NAME = @column_name) > 0,
CONCAT('SELECT ''skip: column '', @column_name, '' exists'' AS info'),
IF(
@after_column IS NOT NULL AND @after_column <> ''
AND (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @table_name AND COLUMN_NAME = @after_column) > 0,
CONCAT('ALTER TABLE `', @table_name, '` ADD COLUMN `', @column_name, '` ', @column_def, ' AFTER `', @after_column, '`'),
CONCAT('ALTER TABLE `', @table_name, '` ADD COLUMN `', @column_name, '` ', @column_def)
)
)
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;