我们正在将新的SQL Server 2017数据库迁移到Azure。今天,我们以评估模式运行了Microsoft数据迁移助手,以便从SQL Server迁移到Azure SQL数据库。我们正在尝试解决“未解决的对对象的引用”阻止程序项。这不应算作跨数据库查询。该视图在我们的本地实例中运行良好。
在“评估建议”部分下,有以下内容:
{ "CompatibilityLevel": "CompatLevel140",
"Category": "Compatibility",
"Severity": "Error",
"ChangeCategory": "MigrationBlocker",
"RuleId": "71501",
"Title": "Unresolved references found",
"Impact": "One or more objects were found that contain unresolved references, which may block migration to Azure SQL Database.",
"Recommendation": "Address the unresolved references reported in \"Object details\" section.",
"MoreInfo": "",
"ImpactedObjects": See below... }
对于dbo.VW_BUILD_PARAMETERS
存储过程,ImpactedObjects下报告了以下问题:
{
"Name": "dbo.VW_BUILD_PARAMETERS.IsOutPutParameter",
"ObjectType": "Computed Column",
"ImpactDetail": "Computed Column: [dbo].[VW_BUILD_PARAMETERS].[IsOutPutParameter] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [sys].[objects].[P]::[is_output], [sys].[parameters].[is_output] or [sys].[parameters].[P]::[is_output]. For more details, please see: Line 18, Column 1.",
"SuggestedFixes": []
},
{
"Name": "dbo.VW_BUILD_PARAMETERS.ObjectName",
"ObjectType": "Computed Column",
"ImpactDetail": "Computed Column: [dbo].[VW_BUILD_PARAMETERS].[ObjectName] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [sys].[objects].[Name], [sys].[objects].[SO]::[Name] or [sys].[parameters].[SO]::[Name]. For more details, please see: Line 5, Column 8.",
"SuggestedFixes": []
},
{
"Name": "dbo.VW_BUILD_PARAMETERS.ParameterOrder",
"ObjectType": "Computed Column",
"ImpactDetail": "Computed Column: [dbo].[VW_BUILD_PARAMETERS].[ParameterOrder] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [sys].[objects].[P]::[parameter_id], [sys].[parameters].[P]::[parameter_id] or [sys].[parameters].[parameter_id]. For more details, please see: Line 14, Column 1.",
"SuggestedFixes": []
},
这是存储过程:
CREATE VIEW [dbo].[VW_BUILD_PARAMETERS]
AS
SELECT SO.Name AS [ObjectName],
CASE SO.Type_Desc
WHEN 'SQL_STORED_PROCEDURE'
THEN 'Procedure'
WHEN 'SQL_SCALAR_FUNCTION'
THEN 'Function'
WHEN 'SQL_INLINE_TABLE_VALUED_FUNCTION'
THEN 'Function'
END AS [ObjectType],
P.parameter_id AS ParameterOrder,
REPLACE( P.name, '@','') AS ParameterName,
UPPER(TYPE_NAME(P.system_type_id)) AS ParameterType,
CASE
WHEN TYPE_NAME(P.user_type_id) = 'varchar'
THEN CAST(P.max_length AS INT)
END AS MaximumCharacterLength,
P.is_output AS [IsOutPutParameter]
FROM sys.objects AS SO
INNER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.type IN ('P','FN','IF')
AND P.parameter_id > 0
我看不到'P.parameter_id AS ParameterOrder'
的解决方式:
[sys].[objects].[P]::[parameter_id]
-为什么要尝试对sys.objects做P别名?没有sys.objects.parameter_id。
[sys].[parameters].[P]::[parameter_id]
-看起来应该像这样
[sys].[parameters].[parameter_id]
-为什么它不匹配P别名