Sql 是否有创建sysdiagrams表和支持存储过程的存储过程?
目前,我们的本地构建包括一个数据库构建和部署步骤,该步骤基于SQLServer2008数据库项目中包含的数据库模型将数据库部署到开发人员的本地计算机。这对于部署数据库架构很好,但无法部署任何已定义的数据库关系图 为了部署关系图,我们目前必须包括sysdiagrams表的创建脚本和设计器依赖的存储过程,以及关系图定义的数据插入脚本,作为部署后阶段的一部分Sql 是否有创建sysdiagrams表和支持存储过程的存储过程?,sql,sql-server,visual-studio-2010,sql-server-2008,Sql,Sql Server,Visual Studio 2010,Sql Server 2008,目前,我们的本地构建包括一个数据库构建和部署步骤,该步骤基于SQLServer2008数据库项目中包含的数据库模型将数据库部署到开发人员的本地计算机。这对于部署数据库架构很好,但无法部署任何已定义的数据库关系图 为了部署关系图,我们目前必须包括sysdiagrams表的创建脚本和设计器依赖的存储过程,以及关系图定义的数据插入脚本,作为部署后阶段的一部分 是否有更好的方法来部署sysdiagrams表和存储过程?当在询问是否要创建用于图表绘制的支持对象的对话框中单击“是”时,这些对象是在sql s
是否有更好的方法来部署sysdiagrams表和存储过程?当在询问是否要创建用于图表绘制的支持对象的对话框中单击“是”时,这些对象是在sql server management studio中创建的—这是否调用了我可以挂接的对象?我找不到相关的存储过程。我使用了一个工具来导入和导出SQL图表。2008年的版本是Craig Dunn的Tool_ScriptDiagram2008。看一看。我使用它将图表导出为可以保存在源代码管理中的文本格式,然后这些来自源代码管理的脚本可以用于在任何机器上重新创建图表。我使用了一个工具来导入和导出SQL图表。2008年的版本是Craig Dunn的Tool_ScriptDiagram2008。看一看。我使用它将图表导出为可以保存在源代码管理中的文本格式,然后这些来自源代码管理的脚本可以用于在任何机器上重新创建图表。没有这样的过程。如果您想将图表保存在安全的地方,请使用数据为表sysdiagrams和支持对象(如果有)编写脚本,并保留生成的脚本。仅此而已。没有这样的程序。如果您想将图表保存在安全的地方,请使用数据为表sysdiagrams和支持对象(如果有)编写脚本,并保留生成的脚本。仅此而已。没有办法做到这一点,您应该记住,不同版本的SQL Server之间的数据库关系图格式不同,因此不能将SQL2008关系图直接插入SQL 2000数据库。该图作为二进制文件存储在数据库中 你可以继续做你目前正在做的事情,或者在工具上做一次尝试
注意:我与该网站没有任何联系,因此无法对此进行担保,但它可能会给您一些想法。没有这样做的方法,您应该记住,SQL Server版本之间的数据库关系图格式不同,因此不能将SQL2008关系图直接插入SQL 2000数据库。该图作为二进制文件存储在数据库中 你可以继续做你目前正在做的事情,或者在工具上做一次尝试
注意:我与该站点没有连接,因此无法对此进行担保,但它可能会给您一些想法。我对一个可以创建sysdiagrams表()的常用存储过程的一些小修改:
它将生成一个SQL脚本,您可以将其另存为图表的“可移植”版本。执行脚本将名为“My diagram”的图插入sysdiagrams表。如果sysdiagrams表不存在,它甚至会创建它。我对一个可以创建sysdiagrams表()的常用存储过程的一些小修改:
它将生成一个SQL脚本,您可以将其另存为图表的“可移植”版本。执行脚本将名为“My diagram”的图插入sysdiagrams表。如果sysdiagrams表不存在,它甚至会创建该表。由于链接已关闭,我在中发布了我的源代码。由于链接已关闭,我在中发布了我的源代码。很棒的工具。链接已断开,因此此处更新了SQL2012的概念开发代码中的复制源代码:Can-vouch。很棒的工具。链接已断开,因此在此处为SQL2012更新的概念开发代码中复制源代码:
/**
<summary>
Script Sql Server 2008 diagrams (inspired by usp_ScriptDatabaseDiagrams for Sql Server 2000 by Clay Beatty,
and Tool_ScriptDiagram2005 by yours truly)
</summary>
<example>
USE [YourDatabaseName]
EXEC ScriptDiagram2008 'DiagramName'
</example>
<author>Craig Dunn</author>
<remarks>
Helpful Articles
----------------
1) Upload / Download to Sql 2005
http://staceyw.spaces.live.com/blog/cns!F4A38E96E598161E!404.entry
2) MSDN: Using Large-Value Data Types
http://msdn2.microsoft.com/en-us/library/ms178158.aspx
3) "original" Script, Save, Export SQL 2000 Database Diagrams
http://www.thescripts.com/forum/thread81534.html
<![CDATA[ http://groups-beta.google.com/group/comp.databases.ms-sqlserver/browse_frm/thread/ca9a9229d06a56f9?dq=&hl=en&lr=&ie=UTF-8&oe=UTF-8&prev=/groups%3Fdq%3D%26num%3D25%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26group%3Dcomp.databases.ms-sqlserver%26start%3D25 ]]>
4) SQL2008 'undocumented' sys.fn_varbintohexstr
http://www.sqlservercentral.com/Forums/Topic664234-1496-1.aspx
</remarks>
<param name="name">Name of the diagram in the Sql Server database instance</param>
*/
CREATE PROCEDURE [dbo].[ScriptDiagram2008]
(
@DiagramName VARCHAR(128)
)
AS
BEGIN
DECLARE @diagram_id INT
DECLARE @index INT
DECLARE @size INT
DECLARE @chunk INT
DECLARE @line VARCHAR(max)
-- Set start index, and chunk 'constant' value
SET @index = 1 --
SET @chunk = 32 -- values that work: 2, 6
-- values that fail: 15,16, 64
-- Get PK diagram_id using the diagram's name (which is what the user is familiar with)
SELECT
@diagram_id = diagram_id,
@size = DATALENGTH(definition)
FROM sysdiagrams
WHERE [name] = @DiagramName
IF @diagram_id IS NULL
BEGIN
PRINT '/**<error>'
PRINT 'Diagram name [' + @DiagramName + '] could not be found.'
PRINT '</error>*/'
END
ELSE -- Diagram exists
BEGIN
-- Now with the diagram_id, do all the work
PRINT '/**'
PRINT '<summary>'
PRINT 'Restore diagram ''' + @DiagramName + ''''
PRINT '</summary>'
PRINT '<remarks>'
PRINT 'Generated by ScriptDiagram2008'
PRINT 'Will attempt to create [sysdiagrams] table if it doesn''t already exist'
PRINT '</remarks>'
PRINT '<generated>' + LEFT(CONVERT(VARCHAR(23), GETDATE(), 121), 16) + '</generated>'
PRINT '*/'
PRINT 'PRINT ''=== ScriptDiagram2008 restore diagram [' + @DiagramName + '] ==='''
PRINT ' -- If the sysdiagrams table has not been created in this database, create it!
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''sysdiagrams'')
BEGIN
-- Create table script generated by Sql Server Management Studio
-- _Assume_ this is roughly equivalent to what Sql Server/Management Studio
-- creates the first time you add a diagram to a 2008 database
CREATE TABLE [dbo].[sysdiagrams](
[name] [sysname] NOT NULL,
[principal_id] [int] NOT NULL,
[diagram_id] [int] IDENTITY(1,1) NOT NULL,
[version] [int] NULL,
[definition] [varbinary](max) NULL,
PRIMARY KEY CLUSTERED
(
[diagram_id] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ,
CONSTRAINT [UK_principal_name] UNIQUE NONCLUSTERED
(
[principal_id] ASC,
[name] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF)
)
EXEC sys.sp_addextendedproperty @name=N''microsoft_database_tools_support'', @value=1 , @level0type=N''SCHEMA'',@level0name=N''dbo'', @level1type=N''TABLE'',@level1name=N''sysdiagrams''
PRINT ''[sysdiagrams] table was created as it did not already exist''
END
-- Target table will now exist, if it didn''t before'
PRINT 'SET NOCOUNT ON -- Hide (1 row affected) messages'
PRINT 'DECLARE @newid INT'
PRINT ''
PRINT 'PRINT ''Create row for new diagram'''
-- Output the INSERT that _creates_ the diagram record, with a non-NULL [definition],
-- important because .WRITE *cannot* be called against a NULL value (in the WHILE loop)
-- so we insert 0x so that .WRITE has 'something' to append to...
PRINT 'BEGIN TRY'
PRINT ' PRINT ''Write diagram ' + @DiagramName + ' into new row (and get [diagram_id])'''
SELECT @line =
' INSERT INTO sysdiagrams ([name], [principal_id], [version], [definition])'
+ ' VALUES (''' + [name] + ''', '+ CAST (principal_id AS VARCHAR(100))+', '+CAST (version AS VARCHAR(100))+', 0x)'
FROM sysdiagrams WHERE diagram_id = @diagram_id
PRINT @line
PRINT ' SET @newid = SCOPE_IDENTITY()'
PRINT 'END TRY'
PRINT 'BEGIN CATCH'
PRINT ' PRINT ''XxXxX '' + Error_Message() + '' XxXxX'''
PRINT ' PRINT ''XxXxX END ScriptDiagram2008 - fix the error before running again XxXxX'''
PRINT ' RETURN'
PRINT 'END CATCH'
PRINT ''
PRINT 'PRINT ''Now add all the binary data...'''
PRINT 'BEGIN TRY'
WHILE @index < @size
BEGIN
-- Output as many UPDATE statements as required to append all the diagram binary
-- data, represented as hexadecimal strings
SELECT @line =
' UPDATE sysdiagrams SET [definition] .Write ('
+ ' ' + UPPER(sys.fn_varbintohexstr (SUBSTRING (definition, @index, @chunk)))
+ ', null, 0) WHERE diagram_id = @newid -- index:' + CAST(@index AS VARCHAR(100))
FROM sysdiagrams
WHERE diagram_id = @diagram_id
PRINT @line
SET @index = @index + @chunk
END
PRINT ''
PRINT ' PRINT ''=== Finished writing diagram id '' + CAST(@newid AS VARCHAR(100)) + '' ==='''
PRINT ' PRINT ''=== Refresh your Databases-[DbName]-Database Diagrams to see the new diagram ==='''
PRINT 'END TRY'
PRINT 'BEGIN CATCH'
PRINT ' -- If we got here, the [definition] updates didn''t complete, so delete the diagram row'
PRINT ' -- (and hope it doesn''t fail!)'
PRINT ' DELETE FROM sysdiagrams WHERE diagram_id = @newid'
PRINT ' PRINT ''XxXxX '' + Error_Message() + '' XxXxX'''
PRINT ' PRINT ''XxXxX END ScriptDiagram2008 - fix the error before running again XxXxX'''
PRINT ' RETURN'
PRINT 'END CATCH'
END
END
exec dbo.ScriptDiagram2008('My diagram')