Поскольку UDF могут использоваться в представлениях, а представления могут использоваться в UDF, потребуется проанализировать все из них, чтобы определить согласованный порядок развертывания - потребуется проанализировать весь SQL. И кто знает, что делать, если у вас есть зависимости от других баз данных.
Редактировать
Насколько я вижу, не существует документированного / поддерживаемого способа форсировать порядок развертывания. При некотором минимальном тестировании мне кажется, что UDF (по крайней мере, с табличным значением) всегда развертываются перед представлениями.
Редактировать 2
Даже незнакомец, оказывается, он делает анализ зависимостей. Глядя на выходной файл .dbschema для проекта db, я вижу, что он создает элемент для функции, который отображает список / столбцы, от которых зависит. Но сценарий развертывания sql все еще помещает представление позже. Любопытно.
Редактировать 3
Возможно, окончательное редактирование. Я вообще считаю, что проблема неразрешима. (Правда, следующие только ошибки, потому что я указал привязку схемы). Если старое определение функции опирается на старое определение представления, а новое определение функции опирается на новое определение представления, нет правильного способа изменить базу данных с помощью ALTER:
create table dbo.T1 (
ID int not null,
C1 varchar(10) not null,
C2 varchar(10) not null,
C3 varchar(10) not null
)
go
create view dbo.V1
with schemabinding
as
select ID,C1,C2
from dbo.T1
go
create function dbo.F1()
returns table
with schemabinding
as
return select ID,C1,C2 from dbo.V1 where ID=1
go
alter view dbo.V1
with schemabinding
as
select ID,C1,C3
from dbo.T1
go
alter function dbo.F1()
returns table
with schemabinding
as
return select ID,C1,C3 from dbo.V1 where ID=1
go
результат:
Msg 3729, Level 16, State 3, Procedure V1, Line 4
Cannot ALTER 'dbo.V1' because it is being referenced by object 'F1'.
Msg 207, Level 16, State 1, Procedure F1, Line 5
Invalid column name 'C3'.