【发布时间】:2013-04-09 15:34:34
【问题描述】:
我们可以使用sql-server's 目录视图轻松地生成/重新创建表。我可以运行像
select * from INFORMATION_SCHEMA.TABLES -- Get all the table names
找到这样的列..
select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'Publishers' -- Get the cols for publisher table
我可以在sys.objects 和/或sys.foreign_keys 中进行这样的查询,以获取有关表、所有列、是否可为空以及其他所有信息的完整信息(primary key、check constraints 等.),并且鉴于这些信息,我可以轻松地重新创建该表的全部内容(包括约束和所有内容)。这听起来可能是个坏主意,也许还有其他方法可以做到这一点,但这不是一个好习惯与否的问题。我想知道的是,有没有包含stored procedure(s)的全部信息的目录?
假设我有一个这样的过程
ALTER PROCEDURE [dbo].[proc_Author]
-- Add the parameters for the stored procedure here
@Flag INT = 1,
@AuthorName NVARCHAR(50) = '',
@AuthorId int = 0,
@Address NVARCHAR(50) = ''
AS
BEGIN
IF (@Flag = 1)
-- INSERTS INTO TABLE DATA --
BEGIN
INSERT INTO Authors VALUES (@AuthorName, @Address);
END
ELSE IF (@Flag = 2)
-- DELETES THE AUTHOR --
BEGIN
DELETE FROM Authors
Where AuthorID = @AuthorId
END
END
我有什么方法可以查询system catalog 并知道我的Proc_Author 的结构以便我可以重建它吗?我知道我可以查询sys.procedures,但它只显示琐碎的细节,我也跑了
select * from INFORMATION_SCHEMA.PARAMETERS
select * from sys.parameters
虽然他们确实给了我有关我的 proc 正在使用的参数的信息,但如果想要从信息中构造 proc 是不够的。所以,我错过了什么?如果可以,是否可以从catalog views 获得构建所需的所有信息?然后是哪一个?如果不是,那么在遵循stored proc 之后,语句(select、insert 或其他)实际存储在磁盘中的位置是什么?当我打开我的SSMS 并右键单击并在一个过程中选择Modify 时,它会在一个新的查询窗口中打开proc,所以它打开时,它必须从disk/catalog views 的某个地方查看到知道这个proc 的结构是什么吗?如何获得?
【问题讨论】:
标签: sql-server stored-procedures ssms