работа с таблицами sys, как и с любой другой таблицей - PullRequest
0 голосов
/ 11 апреля 2011

У меня нет хорошего опыта работы с таблицами sys, сгенерированными MS SQL. Например, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
Могу ли я скопировать эти представления, найденные в DBName\System Views\, в другую базу данных и работать с ними, как с любыми другими таблицами (иметь дело ся имею в виду вопрос sql запросов)?
есть ли какие-то соображения, о которых мне следует позаботиться?

edit
причина, по которой мне нужно это сделать, заключается в том, что SQL Azure неПоддержка системных таблиц.Я использую таблицы sys в своем приложении, поэтому, если я скопирую их в SQL Azure как обычные таблицы, все будет работать нормально?

1 Ответ

3 голосов
/ 11 апреля 2011

SQL Azure не поддерживает information_schema, но поддерживает таблицы sys. * (По крайней мере, те, которые вам нужны).

http://msdn.microsoft.com/en-us/library/ee336238.aspx#catalog

Вы можете использовать следующее:

Select * from sys.foreign_keys fk
inner join sys.foreign_key_columns fkc on fkc.constraint_object_id = fk.object_id

Чтобы получить информацию о столбцах или информацию об индексе, обратитесь к следующим системным таблицам sys.таблицы, sys.indexes и sys.columns.Стандартные представления каталога sys немного сложнее в использовании, чем представления сверху, которые соответствуют стандартам ANSI.

Триггер базы данных, о котором я говорил в своем комментарии, приведен ниже.Это не обрабатывает экземпляр создания fk on table create, но может быть легко расширено для обработки других ситуаций.Это обеспечит точную реализацию этой информации в виде триггера ddl

--drop trigger test on database
create trigger test on DATABASE
for ALTER_TABLE,RENAME
AS
    set nocount on

    --get XML event and extract table and schema
    DECLARE @data XML
    SET @data = EVENTDATA()

    declare @idoc int
    EXEC sp_xml_preparedocument @idoc OUTPUT, @data

    --indicate if table needs to be reloaded
    declare @boolean bit
    set @boolean = 0

    --check conditions where keys change
    SELECT  @boolean = 1
    FROM       OPENXML (@idoc, '/EVENT_INSTANCE/AlterTableActionList/Create/Constraints',2) x
    SELECT  @boolean = 1
    FROM       OPENXML (@idoc, '/EVENT_INSTANCE/AlterTableActionList/Drop/Constraints',2) x

    if @boolean =1
    begin
        --Create the table initially with below line
        --select * into MyInformationSchemaFKs from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
        --Reloads the table if there are constraint changes
        truncate table MyInformationSchemaFKs
        insert into MyInformationSchemaFKs
        select *  from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
    end

    EXEC sp_xml_removedocument @idoc


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