Я создал таблицу базы данных и на производственном и промежуточном сервере с одинаковыми столбцами и ограничениями.
CREATE TABLE dbo.test
(
[COLUMN1] [NVARCHAR](255) NOT NULL,
[COLUMN2] [NVARCHAR](255) NULL,
PRIMARY KEY CLUSTERED ([COLUMN1] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Я создал проект ASP.NET MVC 5 в C #.Используя функцию «Создать базу данных из модели», я создал контроллер представления модели.
Я создаю хранимую процедуру в бэкенде SQL Server, которая проверяет имя сервера, dev или prod, а затем, если dev, копирует значения в dev в prod (в основном синхронизирует таблицы из dev в prod).То же самое верно для продукта.
CREATE PROCEDURE [dbo].[uspSyncTables]
AS
BEGIN TRY
SET NOCOUNT ON
DECLARE @truncateEnvironment VARCHAR(500),
@syncFromEnv VARCHAR(50), @syncToEnv VARCHAR(50),
@delTable VARCHAR(500), @tablename NVARCHAR(1000)
SET @tablename='mydb.dbo.test'
IF(@@SERVERNAME = 'Prod\INSTANCE01')
BEGIN
SET @syncFromEnv = '[prod\INSTANCE01]'
SET @syncToEnv = '[dev\INSTANCE01]'
END
ELSE
BEGIN
SET @syncFromEnv = '[dev\INSTANCE01]'
SET @syncToEnv = '[Prod\INSTANCE01]'
END
-- Variables
DECLARE @sql NVARCHAR(MAX), @message NVARCHAR(4000)
BEGIN
SET @delTable = @syncToEnv+'.'+ @tablename
SET @sql='DELETE FROM '+ @delTable
PRINT @sql
EXEC(@SQL)
END
SET @sql = 'INSERT INTO ' +@delTable + ' SELECT * FROM ' + @syncFromEnv +'.'+ @tablename
EXEC(@SQL)
PRINT 'Rows inserts into : ' + CONVERT(VARCHAR, @@ROWCOUNT)
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000), @ErrorSeverity INT, @ErrorState INT
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH
Я создал кнопку отправки в ASP.NET MVC (Index.html
) и в контроллере, я вызываю эту хранимую процедуру.
Яполучение ошибки
System.Data.SqlClient.SqlException: MSDTC на сервере 'PROD \ INSTANCE01' недоступен
Я думаю, что это возможно, потому что я вызываю удаленную таблицу длясинхронизации.