Как удалить записи со значением по умолчанию SQL? - PullRequest
0 голосов
/ 04 апреля 2020

Как удалить записи со значением по умолчанию? Я пытался удалить, используя «по умолчанию» и «= по умолчанию», но это не работает. Есть ли способ для этого?

Мой код:

delete from Address
where District = default

delete from Address
where District as default

Ошибка:

Incorrect syntax near the keyword 'default'.

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Вы можете посмотреть значение по умолчанию для столбца:

SELECT COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @SchemaName AND
      TABLE_NAME = 'Address' AND
      COLUMN_NAME = 'District'

, а затем включить его в запрос. Вы также можете сделать это напрямую, но это становится немного сложнее, потому что типы могут не совпадать.

Но, если distinct - строка, вы можете использовать:

delete from Address
where District = (select default_value
                  from information_schema.columns
                  where table_schema = @table_schema and
                        table_name = 'Address' and
                        column_name = 'District'
                 );

Важно предостережение: при этом удаляется любая строка, в которой значение соответствует значению по умолчанию, даже если это значение было явно назначено столбцу.

И, если значение по умолчанию NULL, то оно немного отличается нужны сравнения.

0 голосов
/ 04 апреля 2020
create table dbo.testabc
(
    id int identity primary key clustered,
    colA varchar(100) default('abc'),
    colB int default(123456),
    colC date default(getdate())
);

insert into dbo.testabc(colA, colB, colC)
values ('xyz', 123, '20200402'),
(default, 1, '20200220'),('efd', default, '20200320'),('bcd', 100, default);
go


declare @t table(colAdef sql_variant, colBdef sql_variant, colCdef sql_variant);

begin transaction
update top (1) dbo.testabc
set colA = default,
    colB = default,
    colC = default
output inserted.colA, inserted.colB, inserted.colC into @t(colAdef, colBdef, colCdef)
rollback transaction

select 'default values', *
from @t;

select *
from dbo.testabc as a
where exists(select * from @t as t where t.colAdef = a.colA)
or exists(select * from @t as t where t.colBdef = a.colB)
or exists(select * from @t as t where t.colCdef = a.colC)
go

--cleanup
drop table dbo.testabc;
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...