我正在尝试使用游标来清理不再需要的临时表。我有一个小表,其中包含临时表的名称和标识符。游标陷入无限循环,但前提是我在其中执行某些语句。如果我只是打印出 中的值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) 我有三个要迁移到 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 相同的错误消息。
我还检查了这个数据库管理员问题。没有帮助 - 这就是我最初尝试的。如果有人有任何其他想法,我将不胜感激!