Вот структура кода, на которую я смотрю:
CREATE VIEW [dbo].[View1]
AS SELECT t1.[ID] ,
udf1.[Column1] ,
udf1.[Column2] ,
udf1.[Column3]
FROM [Table1] t1
CROSS APPLY [dbo].[UDF1] ( [dbo].[UDF2] ( t1.[ID] ) ) udf1
GO
[dbo].[UDF1]
и [dbo].[UDF2]
являются встроенными табличными функциями.
Я не помню точных деталей, но SSMS выдавал мне ошибки, когда я пытался использовать JOIN
, и SO сказал мне, что мне нужно использовать CROSS APPLY
, чтобы исправить это - я думаю, что это был правильный выбор?
В любом случае, главная проблема, с которой я столкнулся сейчас:
Не удалось найти ни столбец "dbo", ни пользовательскую функцию, ни агрегат "dbo.UDF2", либо имя неоднозначно.
... несмотря на то, что UDF2
явно существует: я вижу это в SSMS.
Я подозреваю, что настоящая проблема в том, что UDF2
передается в качестве параметра в UDF1
.
UDF2
возвращает таблицу, и столбцы точно соответствуют табличному параметру, определенному для UDF1
.
Но я думаю SQL Server не поддерживает этот синтаксис?
Нужно ли преобразовывать мое представление в многострочную табличную функцию, объявлять табличную переменную для получения результатов UDF2
, а затем передавать эту табличную переменную в UDF1
?
(P.S. Ошибки SQL Server - одни из наименее полезных, которые я когда-либо видел, на любом языке ...)