我在具有相同列和约束的生产和登台服务器上创建了一个数据库表两者。
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]
我已经用C#创建了一个ASP.NET MVC 5项目。使用“从模型生成数据库”功能,我创建了一个模型视图控制器。
我在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:服务器“ PROD \ INSTANCE01”上的MSDTC不可用
我在想这可能是因为我调用远程表进行同步。