Sql server 2008 将可执行字符串与sql存储过程中的主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 用于生成此信息
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重叠。不建议使用此方法,因为此方法更简单。