小编CB_*_*Ron的帖子

CURSOR 中的无限循环

我正在尝试使用游标来清理不再需要的临时表。我有一个小表,其中包含临时表的名称和标识符。游标陷入无限循环,但前提是我在其中执行某些语句。如果我只是打印出 中的值FETCH,它就可以完美运行。这是代码。

DECLARE @id bigint;
DECLARE @table_name varchar(max);

DECLARE st CURSOR LOCAL FAST_FORWARD FOR 
SELECT ID, TableName FROM SearchTables WHERE CustomerID IS NULL

OPEN st
FETCH NEXT FROM st INTO @id, @table_name
WHILE @@FETCH_STATUS <> -1 
BEGIN   
    IF(OBJECT_ID(@table_name) IS NOT NULL) 
        EXEC('DROP TABLE ' + @table_name);

    UPDATE SearchTables SET Deleted=1 WHERE ID=@id;

    PRINT CAST(@id AS varchar(max)) + ' ' + @table_name;

    FETCH NEXT FROM st INTO @id, @table_name;
END 

CLOSE st
DEALLOCATE st
Run Code Online (Sandbox Code Playgroud)

如果我注释掉这些行

    IF(OBJECT_ID(@table_name) IS NOT NULL) …
Run Code Online (Sandbox Code Playgroud)

t-sql cursors

6
推荐指数
2
解决办法
1524
查看次数

从 Azure SQL 托管实例备份数据库并还原到本地 SQL Server

我有三个要迁移到 Azure SQL 托管实例的数据库。一个是实用程序数据库,只是通用函数和过程的一小部分集合。一种是用于 Web 应用程序的 OLTP 数据库。第三个是 OLTP 数据库的只读存档,其中包含用于分析和报告的历史数据以及审计表。我需要能够将这些数据库恢复到本地开发和测试服务器。到目前为止,我一直没有成功。

我的第一次尝试是使用备份到 Azure Blob 存储。但是无论我在本地使用什么版本的 SQL Server,我总是收到一个错误,即仅复制备份来自较新版本并且不支持还原。

接下来,我尝试从 SSMS v.18.1 导出数据层应用程序。不幸的是,它永远不会超过出口。我收到数十个错误,读取External references are not supported when creating a package from this platform. 托管实例相对于 Azure SQL DB 的最大优势之一是能够进行跨数据库查询。我有许多链接两个数据库中的表的视图和过程。此外,OLTP 数据库中的某些过程调用实用程序数据库中的函数。由于 MI 不是 Azure SQL 数据库,您会认为这不会成为问题!

搜索谷歌,我在 Stack Overflow 上发现了这个问题。所以我尝试了作为答案提出的 Visual Studio 方法。尽管它似乎可以工作,这意味着它在我的本地计算机上创建了一个多 GB 的文件,但尝试使用 SSMS 导入该文件会给我一个错误,显示为“No data is present in this file.所以然后我尝试使用sqlpackage.exe. 但是该解决方案对我也不起作用,因为它只引用导出模式。如果我尝试导出整个数据库,/Action:Export我会收到与 SSMS 相同的错误消息。

我还检查了这个数据库管理员问题。没有帮助 - 这就是我最初尝试的。如果有人有任何其他想法,我将不胜感激!

restore sql-server-2017 azure-sql-managed-instance

5
推荐指数
1
解决办法
5847
查看次数