Я думаю, что ключевой пункт в пользу Фортрана - то, что это - язык, немного более подходящий для выражения вектора - и основанная на массиве математика. Аналитическая проблема указателя, на которую указывают выше, реальна на практике, так как портативный код не может действительно предположить, что можно сказать компилятору что-то. Всегда существует преимущество для выражения computaitons способом ближе к тому, как домен смотрит. C действительно не имеет массивов вообще, если Вы смотрите тесно, просто что-то такой ведет себя как он. Фортран имеет реальный arrawys. Который помогает скомпилировать для определенных типов алгоритмов специально для параллельных машин.
В глубине души в вещах как система во время выполнения и соглашения о вызовах, C и современный Фортран достаточно подобны, что трудно видеть то, что имело бы значение. Обратите внимание, что C здесь является действительно основой C: C++ является полностью другим вопросом с совсем другими рабочими характеристиками.
Я не знаю, стоит ли это усилий, но я думаю, что создание функции, возвращающей временную таблицу с полями NOT NULL, должно работать для вычисленного значения. например
Create function fnSTestample()
returns @Test TABLE
(
tableId varchar(100) not null
)
WITH SCHEMABINDING
as
begin
insert @Test(tableID)
select 'some computed value' from dbo.someTable
return
end
, а затем вы выбираете эту функцию в обзоре.
Ура.
Используйте newid ()
CREATE VIEW vwSample WITH SCHEMABINDING
AS
SELECT ID = NEWID()
,Field1
,Field2
,Field3
FROM tbSample
Во-первых, чтобы ответить на ваш вопрос:
Вы не хотите использовать newid ()
для определения своего поля идентификатора, так как оно будет пересчитываться каждый раз, когда вы используйте вид. На самом деле целостность данных - самая большая проблема.
select
row_number() over (order by someStaticAndUniqueFieldLikeCreateDate) as ID,
Field1,
Field2,
Field3
from
tblA
order by
someStaticAndUniqueFieldLikeCreateDate
Это работает только в том случае, если вы заказываете поле, которое будет иметь согласованный порядок, который будет добавлять новые строки, например поле CreateDate
. Если у вас его нет, этот идентификатор может быть изменен. Теперь, если вам нужны эти идентификаторы только во время выполнения, и нет ничего, что постоянно на них ссылается, row_number
будет просто персиковым. Если у вас есть ненадежные данные, невозможно получить надежное поле идентификатора , если только вы не создадите дополнительную таблицу и не воспользуетесь триггерами для ее заполнения.
Во-вторых, будьте осторожны с этим с привязкой схемы
]. Это опасно, если использовать как кладж. Помните, что как только вы создадите представление с привязкой схемы
, вы не сможете изменить схему любой базовой таблицы вообще . Это означает, что вы не можете сделать столбец varchar (50)
varchar (100)
без удаления и повторного добавления всех представлений, у которых есть с включенной привязкой схемы
. Да, вы можете проиндексировать представление, связанное со схемой, но определенно есть компромиссы, которые необходимо принять во внимание, прежде чем переходить к блокировке, запасу и баррель.