我们正在编写一个负责获取存储过程名称的存储过程,并返回包含该存储过程列及其数据类型的结果。但是,我们遇到了执行动态查询以返回存储过程结果的问题,但是我们无法将其存储在临时表中!
您可以在下面看到我们的查询:
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的结果,而是将其留给您来定义存储过程的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句