Как выбрать значение по умолчанию, которое было создано как создать по умолчанию, а затем было привязано к пользовательскому типу данных? - PullRequest
0 голосов
/ 24 мая 2019

Существует таблица со всеми полями пользовательских типов данных и NOT NULL.Существуют некоторые значения по умолчанию, созданные как CREATE DEFAULT и связанные с этими пользовательскими типами данных.Это дано таким образом, и я не могу изменить его.Мне нужно вставить данные в эту таблицу из источника, где есть некоторые NULLS.Как использовать эти значения по умолчанию в моей вставке?

Я пытался получить эти значения по умолчанию, используя определение от sys.default_constraints, но нет никаких значений по умолчанию, созданных как CREATE DEFAULT в sys.default_constraints.

'' 'SQL

- Код, который я не могу изменить

CREATE TYPE dt_myType FROM varchar(255) NOT NULL
GO
CREATE DEFAULT myDefault 
AS
''                     
GO
EXEC sp_bindefault 'myDefault', 'dt_myType'; 
GO
CREATE TABLE myTable (
    f1 dt_myType NOT NULL )
GO

- Мой код

insert into myTable
 (f1)
select 
 case f
   when 1 then 'example'
   else --I need default here
 end
from ...
'''

1 Ответ

0 голосов
/ 25 мая 2019

Если у вас нет слишком большого количества столбцов для тестирования, вы можете сделать что-то вроде этого:

insert into t (<other columns>, a, b)
    select <other columns>, x.a, x.b
    from x
    where x.a is not null and x.b is not null;

insert into t (<other columns>, a )
    select <other columns>, x.a
    from x
    where x.a is not null and x.b is null;

insert into t (<other columns>, b )
    select <other columns>, x.b
    from x
    where x.a is null and x.b is not null;

insert into t (<other columns>)
    select <other columns>
    from x
    where x.a is null and x.b is null;

Это не обобщает многие другие столбцы.

В противном случае, здесьВот некоторые варианты, о которых я могу подумать:

  • Проходить по каждой записи (скажем, с помощью страшного курсора) и создавать insert на основе наличия значений NULL.
  • Используйте триггер instead of для базового конструирования вставок, как описано выше.
  • Вставьте данные, чтобы все значения были значениями по умолчанию, а затем обновите их значениями в данных.
  • Найдите способ проанализировать значение по умолчанию в метаданных, представить его как соответствующий тип и включить его в запрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...