我对MS SQL生成的sys表没有很好的经验,例如INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
我可以将DBName\System Views\
下找到的这些视图复制到另一个数据库并像其他任何表一样处理它们(处理它们我的意思是发出sql查询)?
我有什么需要考虑的因素吗?
修改
我需要这样做的原因是因为SQL Azure不支持sys表。我在我的应用程序中使用sys表,因此如果我将它们作为普通表复制到SQL Azure,那么一切正常吗?
答案 0 :(得分:3)
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.tables,sys.indexes和sys.columns。标准的sys目录视图比符合ANSI标准的视图更难使用。
我在评论中谈到的数据库触发器如下。这不会处理在表创建上创建fk的实例,但可以轻松扩展以处理其他情况。这将确保此信息始终准确实现为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