我有一个返回6列的存储过程。但我想只需要2列并将它们插入到我的表变量中。
DECLARE @CategoryTable TABLE(
CategoryId Int NOT NULL,
Name nvarchar(255) NOT NULL
)
INSERT INTO @CategoryTable EXEC [GetAllTenantCategories] @TenantId
当我运行时
列名或提供的值数与表不匹配 定义
如何仅从存储过程中插入指定的列?
我不想使用SELECT INTO
,因为SQL Azure不支持
在下面尝试并获得Invalid object name '#Temp'
DECLARE @CategoryTable TABLE(
CategoryId Int NOT NULL,
Name nvarchar(255) NOT NULL
)
INSERT INTO #Temp EXEC [GetAllTenantCategories] 1
INSERT INTO @CategoryTable (CategoryId, Name)
SELECT CategoryId, Name from #Temp
DROP TABLE #Temp
答案 0 :(得分:1)
您可以先在temp
中创建INSERT
表,并在table variable
中创建CREATE TABLE #temp
(
your columns and datatype
)
INSERT INTO #temp
EXEC [GetAllTenantCategories] @TenantId
所需的列。
DECLARE @CategoryTable TABLE(
CategoryId Int NOT NULL,
Name nvarchar(255) NOT NULL
)
INSERT INTO @CategoryTable (CategoryId, Name)
select CategoryId, Name from #temp
然后你可以,
DROP TABLE #temp
同时删除#temp表,
{{1}}
答案 1 :(得分:1)
参考https://www.simple-talk.com/sql/performance/execution-plan-basics/
取得的分数当估算计划无效时
在某些情况下,估计的计划根本不起作用。例如,尝试为这段简单的代码生成估计计划:
CREATE TABLE TempTable
(
Id INT IDENTITY (1 , 1 )
,Dsc NVARCHAR (50 )
);
INSERT INTO TempTable ( Dsc )
SELECT [Name]
FROM [Sales] .[Store] ;
SELECT *
FROM TempTable ;
DROP TABLE TempTable ;
您将收到此错误:
Invalid object name 'TempTable'.
优化器,用于生成估计执行计划,不执行T-SQL。
它通过algebrizer
运行语句,前面概述的过程负责验证数据库对象的名称。由于尚未执行查询,因此临时表尚不存在。这是错误的原因。
Running this same bit of code through the Actual execution plan will work perfectly fine.
希望你知道为什么你的临时表方法不起作用:)因为你可能尝试过T-SQL
答案 2 :(得分:0)
我们可以使用 OPENQUERY
SELECT EmployeeID,CurrentSalary INTO #tempEmp
FROM OPENQUERY(LOCALSERVER,'Exec TestDB.dbo.spEmployee')
请参阅此处http://smartreferences.blogspot.com/2014/12/insert-result-of-stored-procedure-into.html