Azure托管数据库实例无法修改存储过程问题求助
问题原因
报错Invalid version: 16. (Microsoft.SqlServer.Smo)的核心原因是本地使用的SQL Server Management Objects(Smo)组件版本与Azure SQL Managed Instance不兼容。Azure托管实例对应SQL Server 2022(内部版本号16),旧版SSMS或独立Smo库无法识别该版本号,导致图形化操作失败;而本地SQL Server实例适配了对应版本的Smo组件,因此操作正常。
解决方案
升级SSMS到最新版本
旧版SSMS内置的Smo组件不支持SQL Server 2022(版本16)的实例。下载安装最新版SSMS,它会自动更新配套的Smo库,适配Azure托管实例的版本。安装完成后重启SSMS,再尝试修改或生成存储过程脚本。更新独立Smo组件(非SSMS场景)
如果是通过自定义程序或第三方工具使用Smo,需单独升级Smo包。通过NuGet安装Microsoft.SqlServer.SqlManagementObjects包,确保版本≥16.x,替换旧版依赖。验证权限与驱动
再次确认登录账号拥有ALTER PROCEDURE和VIEW DEFINITION权限(排除权限配置的边缘问题);同时确保使用最新的SQL Server驱动(如Microsoft ODBC Driver 18 for SQL Server)连接实例,避免旧驱动的兼容性问题。临时替代方案
若暂时无法升级,可直接用T-SQL语句修改存储过程,示例:ALTER PROCEDURE [dbo].[YourTargetProcedure] @Param1 INT, @Param2 VARCHAR(50) AS BEGIN SET NOCOUNT ON; -- 存储过程逻辑代码 END生成脚本可使用
sp_helptext获取定义:EXEC sp_helptext 'dbo.YourTargetProcedure';也可通过Azure Portal的查询编辑器完成操作。
内容的提问来源于stack exchange,提问作者dpimental

