Stored procedures 从中的SP检索数据

Stored procedures 从中的SP检索数据,stored-procedures,sql-server-2012,Stored Procedures,Sql Server 2012,我想使用[sp_Test]从语法代码“from”中检索数据,但它不起作用。你知道怎么解决吗 谢谢 create table datatable (id int, name varchar(100), email varchar(10), phone varchar(10), cellphone varcha

我想使用[sp_Test]从语法代码“from”中检索数据,但它不起作用。你知道怎么解决吗

谢谢

create table datatable (id int,
                        name varchar(100),
                        email varchar(10),
                        phone varchar(10),
                        cellphone varchar(10),
                        none varchar(10)                        
                       );

insert into datatable values
  (1, 'productname', 'A', 'A', 'A', 'A'), 
  (2, 'cost', '20', 'A', 'A', 'A'),
  (3, 'active', 'Y', 'A', 'A', 'A');

insert into datatable values
  (4, 'productname', 'A', 'A', 'A', 'A'), 
  (5, 'cost', '20', 'A', 'A', 'A'),
  (6, 'active', 'Y', 'A', 'A', 'A');


insert into datatable values
  (7, 'productname', 'A', 'A', 'A', 'A'), 
  (8, 'cost', '20', 'A', 'A', 'A'),
  (9, 'active', 'Y', 'A', 'A', 'A');


CREATE PROCEDURE [sp_Test]
as
begin
    set nocount on

    SELECT a.name, a.email, a.phone
    FROM datatable a 

end


首先,您永远不应该使用
sp\ucode>前缀命名存储过程。这是一个非常坏的习惯,可能会与系统存储过程发生冲突

其次,您不能简单地使用
SELECT FROM EXEC
,但您可以创建临时表/变量来保存结果并按如下方式进行查询:

DECLARE @t AS TABLE ( name varchar(100),
                      email varchar(10),
                      phone varchar(10));

INSERT INTO @t
EXEC [dbo].[sp_Test];

SELECT *
FROM @t;

还可以使用环回链接服务器和
OPENQUERY

SELECT * 
FROM OPENQUERY(LOCALSERVER, 'EXEC [sp_Test]');
我强烈建议阅读:


首先,您不应该使用
sp
前缀命名存储过程。这是一个非常坏的习惯,可能会与系统存储过程发生冲突

其次,您不能简单地使用
SELECT FROM EXEC
,但您可以创建临时表/变量来保存结果并按如下方式进行查询:

DECLARE @t AS TABLE ( name varchar(100),
                      email varchar(10),
                      phone varchar(10));

INSERT INTO @t
EXEC [dbo].[sp_Test];

SELECT *
FROM @t;

还可以使用环回链接服务器和
OPENQUERY

SELECT * 
FROM OPENQUERY(LOCALSERVER, 'EXEC [sp_Test]');
我强烈建议阅读: