sql 游标将结果插入 table
sql cursor insert result into a table
我创建了一个游标,它遍历所有数据库并显示每个数据库的 1 条记录。
我希望将记录插入到 1 table 我可以查看的地方。查询可能会更改,这就是为什么我不想为特定查询创建 table 结构并插入它的原因。我想使用 "select into" 子句,但是在光标第二次运行时会失败
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'use [' + @DB_Name + '] Select '''+ @DB_Name + ''' ,'+
--Enter query below
'* from authentication where username like ''%clair@indicater%'' and password = ''Rohan2410'''
-- print @Command
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
你最好使用 INSERT INTO ... 而不是 SELECT INTO,像这样:
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'use [' + @DB_Name + ']
IF OBJECT_ID(''tempdb..##output'') IS NULL
BEGIN
SELECT NULL AS DB_Name,*
INTO ##output
FROM authentication WHERE 1=0
END
INSERT INTO ##output
Select '''+ @DB_Name + ''' ,'+
--Enter query below
'* from authentication where username like ''%clair@indicater%'' and password = ''Rohan2410'''
-- print @Command
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
SELECT * FROM ##output
DROP TABLE ##output
基本上,在第一次游标迭代时,我们将创建一个具有正确结构的空临时 table。然后我们只需插入该临时文件 table.
我创建了一个游标,它遍历所有数据库并显示每个数据库的 1 条记录。
我希望将记录插入到 1 table 我可以查看的地方。查询可能会更改,这就是为什么我不想为特定查询创建 table 结构并插入它的原因。我想使用 "select into" 子句,但是在光标第二次运行时会失败
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'use [' + @DB_Name + '] Select '''+ @DB_Name + ''' ,'+
--Enter query below
'* from authentication where username like ''%clair@indicater%'' and password = ''Rohan2410'''
-- print @Command
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
你最好使用 INSERT INTO ... 而不是 SELECT INTO,像这样:
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'use [' + @DB_Name + ']
IF OBJECT_ID(''tempdb..##output'') IS NULL
BEGIN
SELECT NULL AS DB_Name,*
INTO ##output
FROM authentication WHERE 1=0
END
INSERT INTO ##output
Select '''+ @DB_Name + ''' ,'+
--Enter query below
'* from authentication where username like ''%clair@indicater%'' and password = ''Rohan2410'''
-- print @Command
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
SELECT * FROM ##output
DROP TABLE ##output
基本上,在第一次游标迭代时,我们将创建一个具有正确结构的空临时 table。然后我们只需插入该临时文件 table.