Как указать на столбцы как на NOT NULL в представлении?

Я думаю, что ключевой пункт в пользу Фортрана - то, что это - язык, немного более подходящий для выражения вектора - и основанная на массиве математика. Аналитическая проблема указателя, на которую указывают выше, реальна на практике, так как портативный код не может действительно предположить, что можно сказать компилятору что-то. Всегда существует преимущество для выражения computaitons способом ближе к тому, как домен смотрит. C действительно не имеет массивов вообще, если Вы смотрите тесно, просто что-то такой ведет себя как он. Фортран имеет реальный arrawys. Который помогает скомпилировать для определенных типов алгоритмов специально для параллельных машин.

В глубине души в вещах как система во время выполнения и соглашения о вызовах, C и современный Фортран достаточно подобны, что трудно видеть то, что имело бы значение. Обратите внимание, что C здесь является действительно основой C: C++ является полностью другим вопросом с совсем другими рабочими характеристиками.

7
задан Paulo Santos 15 August 2009 в 12:36
поделиться

3 ответа

Я не знаю, стоит ли это усилий, но я думаю, что создание функции, возвращающей временную таблицу с полями 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

, а затем вы выбираете эту функцию в обзоре.

Ура.

3
ответ дан 7 December 2019 в 05:26
поделиться

Используйте newid ()

CREATE VIEW vwSample WITH SCHEMABINDING
AS
SELECT ID = NEWID()
      ,Field1
      ,Field2
      ,Field3
  FROM tbSample
0
ответ дан 7 December 2019 в 05:26
поделиться

Во-первых, чтобы ответить на ваш вопрос:

Вы не хотите использовать 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) без удаления и повторного добавления всех представлений, у которых есть с включенной привязкой схемы . Да, вы можете проиндексировать представление, связанное со схемой, но определенно есть компромиссы, которые необходимо принять во внимание, прежде чем переходить к блокировке, запасу и баррель.

4
ответ дан 7 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: