以编程方式创建用于删除和创建具有依赖顺序的数据库视图的脚本
Posted
技术标签:
【中文标题】以编程方式创建用于删除和创建具有依赖顺序的数据库视图的脚本【英文标题】:Creating A Script For Dropping and Creating Views of a Database With Dependency Order, Programatically 【发布时间】:2012-11-14 13:08:50 【问题描述】:我只看到this topic。 这与我的问题非常相似。 但我不想使用任何第三方来创建脚本。 我想以依赖顺序和编程方式创建删除和创建数据库视图的脚本。 我怎么能做这种事?
【问题讨论】:
首先,在定义视图的依赖顺序时要非常精确 - 然后在数据字典中查询这些规则,然后从您选择的语言生成脚本。然后发布您尝试过的内容以及无效的内容。 谢谢,我只想照你说的做,你能解释一下吗,我刚试过ssms,scriptio和其他微软工具,就像ssms生成脚本一样,我不记得名字了。您或其他人能否详细描述您所说的内容,谢谢。 我找到了这样的方法来创建命令,但它没有依赖关系: SELECT 'DROP VIEW ' + v.name As DropCmd, RTRIM(ISNULL(smv.definition, ssmv.definition) ) AS CreateCmd FROM sys AS v LEFT OUTER JOIN sys.sql_modules AS smv ON smv。 object_id = v.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmv ON ssmv.object_id = v.object_id WHERE v.type = 'V' AND SCHEMA_NAME(v.schema_id) = N'dbo' ORDER BY v.name 【参考方案1】:最后我发现我的答案是这样的, 但请记住,这仅适用于具有一个嵌套级别的视图。不多 ! :
SELECT MIN(Row) AS Row, CreateCmd FROM (
SELECT Row_Number() OVER (ORDER BY S.Row) As Row, S.CreateCmd FROM (
SELECT 0 AS Row, RTRIM(ISNULL(smv.definition, ssmv.definition)) AS CreateCmd
FROM sys.all_objects AS v
LEFT OUTER JOIN sys.sql_modules AS smv ON smv.object_id = v.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmv ON ssmv.object_id = v.object_id
INNER JOIN (SELECT object_id, referenced_major_id FROM sys.sql_dependencies
GROUP BY object_id, referenced_major_id) AS a ON v.object_id = a.referenced_major_id
WHERE (v.type = 'V' OR v.type = 'P' OR v.type = 'IF' OR v.type = 'TF' OR v.type = 'FN')
AND SCHEMA_NAME(v.schema_id) = N'dbo' AND is_ms_shipped <> 1
AND smv.execute_as_principal_id IS NULL AND ssmv.execute_as_principal_id IS NULL
GROUP BY v.Name, smv.definition, ssmv.definition
UNION ALL
SELECT 1 AS Row, RTRIM(ISNULL(smv.definition, ssmv.definition)) AS CreateCmd
FROM sys.all_objects AS v
LEFT OUTER JOIN sys.sql_modules AS smv ON smv.object_id = v.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmv ON ssmv.object_id = v.object_id
INNER JOIN (SELECT object_id, referenced_major_id FROM sys.sql_dependencies
GROUP BY object_id, referenced_major_id) AS a ON v.object_id = a.object_id
WHERE (v.type = 'V' OR v.type = 'P' OR v.type = 'IF' OR v.type = 'TF' OR v.type = 'FN')
AND SCHEMA_NAME(v.schema_id) = N'dbo' AND is_ms_shipped <> 1
AND smv.execute_as_principal_id IS NULL AND ssmv.execute_as_principal_id IS NULL
GROUP BY v.Name, smv.definition, ssmv.definition
) S GROUP BY S.Row, CreateCmd
) D GROUP BY CreateCmd ORDER BY Row
【讨论】:
以上是关于以编程方式创建用于删除和创建具有依赖顺序的数据库视图的脚本的主要内容,如果未能解决你的问题,请参考以下文章
创建具有甘特图的 Sharepoint 列表 - 以编程方式