Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 2008 将可执行字符串与sql存储过程中的主sql组合_Sql Server 2008 - Fatal编程技术网

Sql server 2008 将可执行字符串与sql存储过程中的主sql组合

Sql server 2008 将可执行字符串与sql存储过程中的主sql组合,sql-server-2008,Sql Server 2008,在sql过程中,我创建了一个临时表,然后对其进行透视。这是动态的,所以最后我不知道有多少列。让我们制作这个表格: equipmentID | Name1 | Name2 | Name3 1 | 34.54 | 21.23 | 213.65 2 | 334 | 23.421 | 23.12 3 | 43.4 | 2.34 | 23.41 用于生成此信息

在sql过程中,我创建了一个临时表,然后对其进行透视。这是动态的,所以最后我不知道有多少列。让我们制作这个表格:

equipmentID   |   Name1   |   Name2   | Name3
1             |   34.54   |   21.23   | 213.65
2             |   334     |   23.421  | 23.12
3             |   43.4    |   2.34    | 23.41
用于生成此信息的查询存储在字符串中,并通过调用execute@stringQuery.

我的另一个表使用普通sql查询获取,并生成另一组信息,包括透视表中包含的equipmentID

我想做的是基于equipmentID连接这两个表,这样存储过程返回一个表而不是两个表,但我不知道如何执行此操作

到目前为止,我已经尝试了几种方法:

保留第二个主查询,并将执行行添加到FROM部分末尾的in中,以便在连接所有表之后:

左连接execute@stringQuery与strQ.equipmentID=mainQ.equipmentID上的strQ相同

将第二个查询设置为字符串,以便使用execute命令获取它们,或者创建另一个包含主sql的存储过程,以便它们再次使用execute命令。这会获取信息,但不会合并信息。在本例中,我尝试将这两种执行方式结合起来:

执行“+@query1+”中的“选择*”作为tbl2左连接“+@query2+”作为tbl2上的tbl1.equipmentID=tbl1.equipmentID”

将主查询转换为字符串,然后使用左连接将其组合,使其成为一个大查询

所有这些都给我带来了问题。我觉得这是一件很平常的事情,除了我已经尝试过的以外,我不知道如何解决它

编辑
当我试图创建一个临时表时,我被告知插入或选择临时表名是一个无效的对象。

将动态查询输出到临时表怎么样。然后,您可以像引用任何其他表一样引用输出

动态查询:

SELECT x,y,z 
INTO #MyTempTable
...
最后查询:

SELECT *
FROM TABLE
    JOIN #MyTempTable ON ...

我让它工作了。我所做的是使用一个全局临时表。这样我就可以在multipleexecute语句中使用它,而不是使用普通的临时表。这样,我也可以加入全局临时表。请记住,每个过程使用一个唯一的id,这样您就可以知道当前正在处理的行,因为这可以在几个过程中看到。通过这种方式,我还可以根据末尾的id删除行。

您的问题比看起来要难一些。问题源于这样一个事实,即动态生成的列中有一个格式未知的表

表中的列只有在运行时才为人所知,这会强制执行一个复杂而繁琐的解决方案,或者是一个不理想的解决方案

您选择的全局临时表解决方案可能是最简单的解决方案之一,但请看这里,跳到全局临时表或搜索所选解决方案的一些缺陷:


简单的回答是没有好的方法可以做到这一点。

谢谢。我不知道为什么我没有看到。我把它弄得很复杂lol我回去工作的时候会试试这个:实际上我记得我已经试过了,但是因为数据透视产生的列数是动态的,所以我不得不在一个字符串中创建表,然后执行它。然后,每当我试图执行该过程时,它就不会在数据库中运行,因为表不存在。@Kyra-Huh?这应该行得通。temp表应该使用相同的会话构建,因此该表应该是可用的。这一切都发生在同一个会话中吗?它发生在同一个事务中。星期一上班时我可以再试试这个请注意,使用SELECT INTO时,不需要先显式创建表。这正是我进行类似查询的方式。另一种方法是创建全局临时表等,但您需要动态创建名称,以避免与GUID重叠。不建议使用此方法,因为此方法更简单。