存储过程:将查询结果(如表)保留在变量中

时间:2015-07-15 22:20:55

标签: sql sql-server stored-procedures

我来自实体框架背景,我没有做很多纯SQL开发。

但是,在处理EF时,我们可以这样做:

var persons = from x in db.Person
              where x.Name.Equals("Something")
              select x;

IQuerable<Person> persons = from x in db.Person
                             where x.Name.Equals("Something")
                             select x; 

但是在处理存储过程时,如何才能完全完成,例如我可以通过声明DECLARE @Name NVARCHAR(15)来捕获变量,但是如何获取返回的表结果?

4 个答案:

答案 0 :(得分:2)

创建一个表变量并将数据插入:

DECLARE @Person table(
    FirstName nvarchar(15),
    LastName nvarchar(15)
);

Insert Into @Person(FirstName, LastName)
Select Firstname, LastName
  From Person
  Where LastName = @LastName; -- where @lastname comes from a sp parameter.

现在做像

这样的事情
Select count(*) from @Person;

答案 1 :(得分:0)

只需声明一个表变量:

DECLARE @TableVariable TABLE 
(
    PrimaryKey INT, 
    Name NVARCHAR(MAX)
)

并将结果插入此表。

答案 2 :(得分:0)

@ ps2goat回答的一种方式。如果您希望将存储过程输出到表中,那么您可以这样做: -

DECLARE @Person table
(
    Id        Int Identity(1,1)
   ,FirstName nvarchar(15)
   ,LastName  nvarchar(15)
);

Insert Into @Person(FirstName,LastName)
Exec dbo.USP_SomeStoredProcedure <sp's parameters>;

Select Top 1
        FirstName
       ,LastName
From   @Person As p
Order By p.Id Asc

注意: - 您的调用过程输出和表列完全匹配应该是相同的

答案 3 :(得分:-2)

我自己找到了正确的答案。我想我必须使用游标,这是最好的。