Как я нахожу ограничение по умолчанию с помощью INFORMATION_SCHEMA?

Я пытаюсь протестировать, если данное ограничение по умолчанию существует. Я не хочу использовать sysobjects таблицу, но более стандартный INFORMATION_SCHEMA.

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

Они не там? (Я использую SQL Server 2000 MS).

Править: Я надеюсь добираться под названием ограничение.

109
задан vinay Maneti 4 July 2017 в 09:44
поделиться

7 ответов

Вероятно, потому что на части другого SQL DBMSs "ограничение по умолчанию" не является действительно ограничением, Вы не найдете его имя в "INFORMATION_SCHEMA.TABLE_CONSTRAINTS", таким образом, Ваш лучший выбор будет "INFORMATION_SCHEMA.COLUMNS", как другие уже упомянули.

(SQLServer-невежда здесь)

единственное причина я могу думать, когда необходимо знать, что "ограничение по умолчанию" имя состоит в том, если SQLServer не поддерживает "ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..." команда. Но тогда Вы уже находитесь в нестандартной зоне, и необходимо использовать особенные методы продукта получить то, в чем Вы нуждаетесь.

0
ответ дан Milen A. Radev 24 November 2019 в 03:22
поделиться

Я не думаю, что это находится в INFORMATION_SCHEMA - Вы должны будете, вероятно, использовать sysobjects или связали удержанные от использования таблицы/представления.

Вы думали бы, что будет тип для этого в INFORMATION_SCHEMA.TABLE_CONSTRAINTS, но я не вижу тот.

0
ответ дан Cade Roux 24 November 2019 в 03:22
поделиться

Кажется, нет никаких Ограничительных имен По умолчанию в Information_Schema представления.

использование SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name для нахождения ограничения по умолчанию по имени

37
ответ дан Michael Fredrickson 24 November 2019 в 03:22
поделиться

Можно использовать следующее для сужения результатов еще больше путем определения Имени таблицы и Имени столбца, к которому коррелирует Ограничение По умолчанию:

select * from sysobjects o 
inner join syscolumns c
on o.id = c.cdefault
inner join sysobjects t
on c.id = t.id
where o.xtype = 'D'
and c.name = 'Column_Name'
and t.name = 'Table_Name'
43
ответ дан Tim Lentine 24 November 2019 в 03:22
поделиться

Столбец COLUMN_DEFAULT INFORMATION_SCHEMA.COLUMNS то, что Вы ищете?

2
ответ дан user12861 24 November 2019 в 03:22
поделиться

Как насчет использования комбинации CHECK_CONSTRAINTS и CONSTRAINT_COLUMN_USAGE:

    select columns.table_name,columns.column_name,columns.column_default,checks.constraint_name
          from information_schema.columns columns
             inner join information_schema.constraint_column_usage usage on 
                  columns.column_name = usage.column_name and columns.table_name = usage.table_name
             inner join information_schema.check_constraints checks on usage.constraint_name = checks.constraint_name
    where columns.column_default is not null
0
ответ дан 24 November 2019 в 03:22
поделиться
select c.name, col.name from sys.default_constraints c
    inner join sys.columns col on col.default_object_id = c.object_id
    inner join sys.objects o  on o.object_id = c.parent_object_id
    inner join sys.schemas s on s.schema_id = o.schema_id
where s.name = @SchemaName and o.name = @TableName and col.name = @ColumnName
3
ответ дан 24 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

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