ASP.NET MVC调用带有远程表的存储过程

时间:2019-04-08 00:50:25

标签: sql-server asp.net-mvc

我在具有相同列和约束的生产和登台服务器上创建了一个数据库表两者

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不可用

我在想这可能是因为我调用远程表进行同步。

0 个答案:

没有答案