Sql server 将动态SQL的结果插入到2个表变量中
我需要执行一些动态SQL,它将返回2个结果集,并将结果集存储在一个表变量中 假设我有两个表(糟糕的模式,但说明了我的问题) 表1:Sql server 将动态SQL的结果插入到2个表变量中,sql-server,Sql Server,我需要执行一些动态SQL,它将返回2个结果集,并将结果集存储在一个表变量中 假设我有两个表(糟糕的模式,但说明了我的问题) 表1: ItemID int ItemName nvarchar(50) 表2: ItemId int Quantity int 我生成了一些动态sql,如下所示: DECALRE @sql varchar(max); SET @sql = 'SELECT * FROM Table1; SELECT * from Table2'; 然后我创建我的表变量: DECA
ItemID int
ItemName nvarchar(50)
表2:
ItemId int
Quantity int
我生成了一些动态sql,如下所示:
DECALRE @sql varchar(max);
SET @sql = 'SELECT * FROM Table1; SELECT * from Table2';
然后我创建我的表变量:
DECALRE @tbl1 TABLE (ItemId int, ItemName nvarchar(50))
DECALRE @tbl2 TABLE (ItemId int, Quantity int)
CREATE TABLE #Table1(...)
CREATE TABLE #Table2(...)
DECLARE @MyDynamicSql NVARCHAR(MAX) = N'
INSERT INTO #Table1(...)
SELECT ...
INSERT INTO #Table2(...)
SELECT ...'
EXEC(@MyDynamicSql)
然后我想执行动态SQL,并将结果插入到我刚才声明的表变量中。如果动态sql中只有一个结果集,我只需运行以下命令:
INSERT into @tbl1execute ('SELECT * FROM Table1;')
然而,当我使用@sql参数返回多个结果集时,这显然失败了。这可能吗?使用临时表(而不是表变量):
但是,在编写这种意大利面代码时,需要注意以下几点:
DROP
语句,SQL解析器也会向您抛出错误(阅读:在运行批处理之前,您必须删除表以更改其结构)不,不能从一条动态语句插入到两个表中。请注意,这里不需要动态sql,至少在这个简化的示例中是这样。另外,您正在插入示例中未声明的
@tbl1execute
。请问我们的最终目标是什么?也许有更好、更简单的方法……:)你能解释一下你想通过这样做达到什么目的吗?也许有更好的方法来做你想做的事情……是的,这个例子是垃圾,但我试图说明这个问题。真正的例子是,我们有一个函数,它用ROW OVER包装一个查询,并获取分页信息,如总页数等,用于Execute,但是我需要在另一个表上进行分页,该表可能有当前页的记录,也可能没有记录。我的希望是把结果扔到一个变量中并加入,但看起来这是不可能的。是时候在查询上手动编写该行了,不要依赖该函数。嘿@Elaskanator,谢谢你的建议,但是,这对我的情况不起作用,如果你看看原始帖子上的评论,你就会明白为什么。不过我很感谢你抽出时间。