Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:如何创建具有未知列数据类型/名称的临时表?_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

Sql server SQL Server:如何创建具有未知列数据类型/名称的临时表?

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

我需要对多个数据库进行查询。我得到了为每个数据库构建查询的部分,但是现在我需要为每个查询输入结果,然后我可以返回它

@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() 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编写的变量。我用当前循环的数据库替换查询中的所有内容。