Sql server SQL Server:如何创建具有未知列数据类型/名称的临时表?
我需要对多个数据库进行查询。我得到了为每个数据库构建查询的部分,但是现在我需要为每个查询输入结果,然后我可以返回它 @requete是一个查询Sql server SQL Server:如何创建具有未知列数据类型/名称的临时表?,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,我需要对多个数据库进行查询。我得到了为每个数据库构建查询的部分,但是现在我需要为每个查询输入结果,然后我可以返回它 @requete是一个查询 ALTER PROCEDURE [dbo].[RequeteMultiBd] @requete varchar(max) AS BEGIN --get server + database name select dbo.trim(Serveur)+'.'+ dbo.trim(db) as name, row_number() o
ALTER PROCEDURE [dbo].[RequeteMultiBd]
@requete varchar(max)
AS
BEGIN
--get server + database name
select dbo.trim(Serveur)+'.'+ dbo.trim(db) as name, row_number() over (order by db) seq into #tmp from dbo.DataBase;
declare @name sysname
declare @sql nvarchar(max)
declare @seq int
set @seq = 0
--getting the next name and seq
select top 1 @name = name, @seq = seq
from #tmp where seq > @seq order by seq
set @sql = replace(@requete, '<bd>', @name);
--Trying to init the table (that part doesnt work)
insert into #result exec( @sql );
--Filling up the table
WHILE (1=1)
BEGIN
select top 1 @name = name, @seq = seq
from #tmp where seq > @seq order by seq
if(@@rowcount = 0) break;
set @sql = replace(@requete, '<bd>', @name);
insert into #result exec( @sql );
END
select * from #result
END
从代码中我得到了这个错误,因为结果不存在。我需要用动态列名创建它,但如何创建
无效的对象名称“结果”
尝试使用选择。。。。从…变成…的结果
这将创建具有正确列的表
尝试使用选择。。。。从…变成…的结果
这将创建具有正确列的表
您可以在过程调用之间共享临时表,但我从未在数据库之间共享过它 看看这个:
您可以在过程调用之间共享临时表,但我从未在数据库之间共享过它 看看这个:
您不需要使用动态sql来运行存储过程,您可以像这样调用它:
EXEC @requete '<bd>', @name
其中@requete是一个有效的名称,如server.owner.procedure\u name您不需要使用动态sql来运行存储过程,您可以这样调用它:
EXEC @requete '<bd>', @name
其中@requete是一个有效的名称,如server.owner.procedure\u name我不能,因为这个过程可以由多个用户同时调用。该临时表中的数据可能错误。临时表是调用作用域的本地表,每个运行都有自己的表,就像每个运行都有自己的变量一样。如果在过程中创建临时表,则从该过程调用的每个过程都可以在该原始临时表中选择/插入/更新/删除,因此共享表。我不能,因为这个过程可以由多个用户同时调用。该临时表中的数据可能错误。临时表是调用作用域的本地表,每个运行都有自己的表,就像每个运行都有自己的变量一样。如果在过程中创建临时表,则从该过程调用的每个过程都可以在该原始临时表中选择/插入/更新/删除,这样就可以共用一张桌子了。什么是?我尝试过:选择*进入exec@sql的结果;但是我得到:关键字“exec”附近的语法不正确。Requete看起来像动态SQL。你可以把它放在执行器里面。像这个exec一样,在播放“++@requete+”之后,exec中声明的结果对调用存储过程不可见。。。对不起,什么是?我尝试过:选择*进入exec@sql的结果;但是我得到:关键字“exec”附近的语法不正确。Requete看起来像动态SQL。你可以把它放在执行器里面。像这个exec一样,在播放“++@requete+”之后,exec中声明的结果对调用存储过程不可见。。。对不起,我忘了翻译我用法语@requete=query写的一个变量。我将查询中的所有内容替换为当前循环的数据库。我忘记了翻译一个用法语@requete=query编写的变量。我用当前循环的数据库替换查询中的所有内容。