sql - 如何在不创建表的情况下将动态查询的结果存储在临时表中?
问题描述
我们正在编写一个存储过程,负责获取存储过程名称并返回包含存储过程列及其数据类型的结果。但是,我们在执行动态查询以返回存储过程的结果时遇到了问题,但我们不能将它存储在临时表中!
您可以在下面看到我们的查询:
DECLARE @ProcName VARCHAR(100)='spGetOraganizationsList',
@ParamName VARCHAR(100),@DataType VARCHAR(20),
@Query NVARCHAR(MAX)='EXEC '+'spGetOraganizationsList '
SELECT PARAMETER_NAME,DATA_TYPE
INTO #Tmp
FROM information_schema.PARAMETERS
WHERE SPECIFIC_NAME=@ProcName
DECLARE ParamCursor CURSOR
FOR SELECT * FROM #Tmp
OPEN ParamCursor
FETCH NEXT FROM ParamCursor
INTO @ParamName,@DataType
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Query=@Query+@ParamName+'=Null,'
FETCH NEXT FROM ParamCursor INTO @ParamName,@DataType
END
CLOSE ParamCursor
DEALLOCATE ParamCursor
DROP TABLE #Tmp
EXEC sp_executesql @Query
问题是我不能将它的结果存储在临时表中,并且OPENROWSET
不接受变量。
解决方案
我认为它来自 sql 概念,它不信任存储过程的结果,因此我们无法通过“在查询表中创建”方法对其进行选择或将其存储在表中。除非您创建一个表并定义它的列和对您的 sql 信任,并且您将它的结果插入到该表中,例如采取以下情况
Create table test (name varchar(10),family varchar(20))
Insert into test
Exec sp-testResult
现在,如果您为表定义错误的列,您将收到查询运行时错误。实际上 sql 不会预测 sp 的结果,而是让您定义存储过程的结果。
推荐阅读
- javascript - 背景没有相对于滑块正确改变
- android - 我需要在android的分页中使用的数据源
- python - 如何概括python中所有字符串的给定代码?
- javascript - 如何在 html li 标记中呈现快速验证器映射的错误值
- javascript - 尝试根据游戏是否结束来更改文本 react.js
- angular - 如何从 Angular 获取 OneDrive API 的访问令牌
- java - 无法建立与数据库的连接
- python - 如何在 Django 表单中设置单选按钮的样式
- bash - 嵌套函数中的 BATS assert_failure
- logstash - 从 Kibana 仪表板中的 LogStash 消息字段中提取