到目前为止,我在网站上找到了列出数据库中所有表的存储过程,但我真正想知道的是如何在SQL Server中创建存储过程以显示特定表中所有表的所有数据数据库中。
我不想加入表然后显示一个巨大的表,我想创建某种循环,它占用数据库的第一个表,执行
SELECT * FROM <Table>
查询,然后继续使用数据库的下一个表,依此类推,直到显示所有表。
我知道它应该很简单,但我之前从未创建过存储过程,因此我不知道如何使用变量或遍历表。
谢谢
答案 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)
答案 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