50 lines
2.5 KiB
Transact-SQL
50 lines
2.5 KiB
Transact-SQL
-- WMS / INTERFACE 共用数据库;先执行此脚本,再发布两个应用。
|
|
-- 幂等执行。归档存储过程使用 INSERT ... SELECT *,新增列必须在两表相同位置且类型一致。
|
|
SET XACT_ABORT ON;
|
|
BEGIN TRY
|
|
BEGIN TRANSACTION;
|
|
IF OBJECT_ID(N'dbo.out_stockout', N'U') IS NULL
|
|
OR OBJECT_ID(N'dbo.out_stockout_finish', N'U') IS NULL
|
|
THROW 51000, N'缺少出库业务表或历史表,请核对目标数据库', 1;
|
|
|
|
IF COL_LENGTH(N'dbo.out_stockout', N'is_expedited') IS NULL
|
|
ALTER TABLE dbo.out_stockout ADD is_expedited int NULL;
|
|
IF COL_LENGTH(N'dbo.out_stockout_finish', N'is_expedited') IS NULL
|
|
ALTER TABLE dbo.out_stockout_finish ADD is_expedited int NULL;
|
|
|
|
IF COL_LENGTH(N'dbo.out_stockout', N'delivery_point') IS NULL
|
|
ALTER TABLE dbo.out_stockout ADD delivery_point nvarchar(100) NULL;
|
|
IF COL_LENGTH(N'dbo.out_stockout_finish', N'delivery_point') IS NULL
|
|
ALTER TABLE dbo.out_stockout_finish ADD delivery_point nvarchar(100) NULL;
|
|
|
|
-- 不移动/重建现有列;只验证本次字段的归档位置及总列数,不改动旧字段映射。
|
|
IF (SELECT COUNT(*) FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.out_stockout'))
|
|
<> (SELECT COUNT(*) FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.out_stockout_finish'))
|
|
THROW 51001, N'业务表与历史表列数不同,已回滚;请核对归档映射', 1;
|
|
|
|
IF EXISTS (
|
|
SELECT 1
|
|
FROM (
|
|
SELECT ROW_NUMBER() OVER (ORDER BY column_id) AS ordinal, name,
|
|
system_type_id, max_length, precision, scale
|
|
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.out_stockout')
|
|
) a
|
|
FULL JOIN (
|
|
SELECT ROW_NUMBER() OVER (ORDER BY column_id) AS ordinal, name,
|
|
system_type_id, max_length, precision, scale
|
|
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.out_stockout_finish')
|
|
) h ON a.ordinal = h.ordinal
|
|
WHERE (a.name IN (N'is_expedited', N'delivery_point') OR h.name IN (N'is_expedited', N'delivery_point'))
|
|
AND (a.name IS NULL OR h.name IS NULL OR a.name <> h.name
|
|
OR a.system_type_id <> h.system_type_id OR a.max_length <> h.max_length
|
|
OR a.precision <> h.precision OR a.scale <> h.scale)
|
|
)
|
|
THROW 51001, N'新增字段在业务表与历史表中的位置或类型不同,已回滚;请核对归档映射', 1;
|
|
|
|
COMMIT TRANSACTION;
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
|
|
THROW;
|
|
END CATCH;
|