如何创建存储过程sql server来查看数据库中的所有表?

时间:2011-12-01 16:06:10

标签: sql-server stored-procedures

到目前为止,我在网站上找到了列出数据库中所有表的存储过程,但我真正想知道的是如何在SQL Server中创建存储过程以显示特定表中所有表的所有数据数据库中。

我不想加入表然后显示一个巨大的表,我想创建某种循环,它占用数据库的第一个表,执行

SELECT * FROM <Table>

查询,然后继续使用数据库的下一个表,依此类推,直到显示所有表。

我知道它应该很简单,但我之前从未创建过存储过程,因此我不知道如何使用变量或遍历表。

谢谢

3 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

CREATE Procedure [dbo].[procSelectAllFromAllTables]
AS

DECLARE @table nvarchar(500)
DECLARE @sql nvarchar(520)

DECLARE CursorSelect CURSOR FOR
    select table_name from INFORMATION_SCHEMA.tables where table_name not like 'sys%'

OPEN CursorSelect
FETCH NEXT FROM CursorSelect
INTO @table

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'select * from ' + @table
    exec(@sql)
    FETCH NEXT FROM CursorSelect
    INTO @table     
END
CLOSE CursorSelect
DEALLOCATE CursorSelect
RETURN

答案 1 :(得分:0)

  1. 了解如何创建存储过程
  2. 了解如何在存储过程中使用变量
  3. Get a list of all the table names
  4. 在所有表名列表中使用cursor to create a while loop
  5. 在'select * from'+ @tablename
  6. 上使用dynamic sql

答案 2 :(得分:0)

正如其他人所说,从实际的角度来看,这是一个愚蠢的想法,但作为一个学术练习,如果你使用一些动态的sql和COALESCE(),这是相当简单的。无需游标或循环。

DECLARE @SQL VARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL, '') + ' SELECT * FROM ' + s.name + '.' + t.name
FROM sys.tables t INNER JOIN sys.schemas s ON s.schema_id = t.schema_id

EXEC @SQL