使用DBContext API批量分隔SQL语句

我们认为我们最近遇到了竞争问题,其中一些t-sql从我们的应用程序中执行,并且相信我们找到了导致此问题的原因。

我们在不同时间调用t-sql来保留应用程序中需要的临时数据。其中的一部分还包括在某些情况下删除表,然后再次创建它。我们最近发现查询表时遇到异常,例如:

Exception: System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'PK_ConsoleData' in the database.
Could not create constraint or index. See previous errors.

 Exception: RowDataGateway.ExecuteSQLStatementFailedException: SQL Statement Failed ---> System.Data.SqlClient.SqlException: Invalid column name 'OriginationSourceHasSubJobLevelErrors'.
Invalid column name 'OriginationSourceHasJobLevelErrors'.
Invalid column name 'OriginationSourceHasSubJobLevelErrors'.
Invalid column name 'DataSourceHasJobLevelErrors'.

我在查看microsoft文档时发现,我们的很多t-sql都执行了一些操作,例如删除表并在同一批中创建它。.每个microsoft:

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.

示例代码:

            IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'ConsoleData' AND TABLE_SCHEMA = N'DBO')
            BEGIN
                DROP TABLE DBO.[ConsoleData]
            END

            BEGIN
            CREATE TABLE DBO.[ConsoleData]
            (
                Column names..              
                CONSTRAINT [PK_ConsoleData] PRIMARY KEY CLUSTERED 
                (
                    [UserId] ASC
                )
            )
            END

当前,我刚刚决定将查询拆分为单独的方法,并分别调用每个方法。我试图读取批处理分隔符,但我们不能使用GO命令(它会导致语法错误,并且每个microsoft都会使用):

Applications based on the ODBC or OLE DB APIs receive a syntax error if they try to execute a GO command. The SQL Server utilities never send a GO command to the server.

是否有另一种方法可以一次从应用程序中调用某些SQL,但是特定部分是作为单独的批处理执行的,还是将调用分为不同的方法更好的做法?

wwwliuscom1 回答:使用DBContext API批量分隔SQL语句

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3062814.html

大家都在问