2015-07-23 5 views
1

У меня есть вид в SQL Server и есть столбец с значением NULL. Я устанавливаю NULL, потому что я собираюсь использовать предложение UNION с другой таблицей позже.указать тип столбца вида

CREATE VIEW [dbo].[myview] (a,b,c) 
AS 
SELECT a,b,NULL; 

Кажется, что-то тип колонки c является INTEGER. Мне нужно установить его на NVARCHAR.

Как я могу изменить этот тип столбца на NVARCHAR?

+1

Почему вы устанавливаете 'значение NULL' в' view'. Вы можете добавить его позже, когда используется предложение 'UNION', и чтобы в нем не было ненужных столбцов. Например: 'SELECT *, NULL FROM my_view UNION ...' – gotqn

+0

@gotqn. Хотя вы в этом случае правы, ваша претензия не будет сохраняться во всех случаях, включая представления и значения NULL (или любое другое статическое значение). Представление можно рассматривать (и использовать как) слой абстракции. Таким образом, совершенно необходимо скрыть тот факт, что конкретный столбец всегда равен NULL, пока «новая реализация» не генерирует другие значения для соответствующих столбцов (столбцов), и никакая модификация не требуется в коде, который использует представление. – Amit

ответ

4

Используйте CAST:

CREATE VIEW [dbo].[myview] (a,b,c) 
AS 
SELECT a,b,CAST(NULL AS NVARCHAR(100)) c; 
+0

Предложение alias "(a, b, c)" является избыточным в вашем примере. –

+0

@ gen-y-s Это в OP, я не касался этого. Весь оператор «неправильный» - «SELECT a, b, c» не может работать без предложения FROM, но я тоже этого не касался. Я ответил на вопрос, не больше и не меньше. Что касается вашего комментария, хотя ... ну, я не согласен с тем, что имена столбцов улучшают читаемость и гарантируют, что «контракт» сохраняется между реализацией (представлением) и использованием (например, другими операциями). Кроме того, ваш комментарий ничего не дает для OP и моего ответа - он лишний. – Amit

+0

Мой комментарий должен был подчеркнуть недостаток в вашем примере, который может смутить людей. В частности, список имен столбцов представления «(a, b, c)» после того, как имя представления действительно улучшает читаемость, и он действительно НЕОБХОДИЛ в примере, заданном OP, поскольку значение NULL в запросе не имеет псевдонима. Но в вашем примере выражение CAST имеет псевдоним (WHY ??? Либо это или список имен столбцов избыточно) –

Смежные вопросы