【发布时间】:2013-09-02 16:56:37
【问题描述】:
我想创建一个 SP 来使用 SQL 中的游标为所有表生成元数据。以下是我尝试过的代码。但它成为一个永无止境的循环,并且重复相同的数据。提前致谢。
--SELECT * FROM information_schema.columns
ALTER PROCEDURE p1
AS
SET NOCOUNT ON;
DECLARE @id INT
, @tablename VARCHAR(100)
, @columnname VARCHAR(100)
, @datatype VARCHAR(100)
, @isnullable VARCHAR(100)
BEGIN
DECLARE CURSOR_1 CURSOR FOR
SELECT TABLE_NAME
, COLUMN_NAME
, DATA_TYPE
, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Employee' -- group BY table_name
OPEN CURSOR_1
FETCH NEXT FROM CURSOR_1 INTO
@tablename,
@columnname,
@datatype,
@isnullable
WHILE @@fetch_status = 0
BEGIN
INSERT INTO table_schema_detail (TABLE_NAME, COLUMN_NAME, DATA_TYPE, isnullable)
VALUES (@tablename, @columnname, @datatype, @isnullable)
END
FETCH NEXT FROM CURSOR_1 INTO
@tablename,
@columnname,
@datatype,
@isnullable
CLOSE CURSOR_1
DEALLOCATE CURSOR_1
SET NOCOUNT OFF;
END
GO
【问题讨论】:
-
是否有理由使用光标进行此操作?
-
@Lamak 你能告诉我我还能做什么。在我的 information_schema.columns 中,我有 3 个表,每个表都有 4 列,所以我使用了游标
-
@Lamak 我以 3 张桌子为例。实际上,我的项目中有很多表,大约有 200 个表。这是为了在使用 SSIS 的报告中显示,并且客户端特定于他们需要使用存储过程而不是任何其他作为性能改进的一部分。
-
我怎么能猜到你的意思是作为一个例子?无论哪种方式,它就像从视图中插入行而不进行过滤一样简单(不过,我还是不明白为什么)
-
好吧,这似乎并没有提供良好的性能,特别是因为您可以完全避免使用游标。你仍然可以在那里使用没有光标的 sp。
标签: sql-server-2008 tsql stored-procedures cursor