2017-08-01 51 views
-1

我使用SQL Server:如何的2个存储过程的结果相结合,该数据在那里我有2种存储过程结合起来,网格视图

1存储过程:

CREATE PROCEDURE A 
AS 
    SELECT DISTINCT 
     TC.*,  MS.* 
    FROM 
     VIEW1 TC, 
     View2 MS 
    WHERE 
     TC.ID = MS.ID 
    ORDER BY 
     TC.Type ASC 

第二存储程序:

CREATE PROCEDURE B 
AS 
    SET NOCOUNT ON 

    SELECT DISTINCT 
     TC.*, MS.* 
    FROM 
     VIEW3 TC, 
     VIEW2 MS 
    WHERE 
     C.ID = MS.ID 
    ORDER BY 
     MS.Date DESC 

我想获得这些2存储过程的数据结果,然后将其绑定到gridview。我创建了以下存储过程,但它引发ID列无效的错误:

CREATED PROCEDURE C 
AS 
    SET NOCOUNT ON 

    SELECT DISTINCT 
     TC.*, MS.* 
    FROM 
     (VIEW1 TC 
    LEFT JOIN 
     VIEW2 MS ON MS.ID = TC.ID) 

    UNION 

    SELECT DISTINCT 
     TC1.*, MS.* 
    FROM 
     (VIEW3 TC1 
    LEFT JOIN 
     VIEW2 MS on MS.ID = TC1.ID) 

如何组合2个存储过程的数据结果?仅供参考,所有列都从视图中选择,而不是表格。

+0

是的我知道这一点,我检查了它。并删除了MySQL并标记为SQL Server – ITDeveloper

+0

如果要使用UNION/UNION ALL组合数据集,这些数据集必须具有相同数量的列和数据类型(使用select *时这很危险),然后UNION运算符将强制数据排序以删除重复项目(不确定是否计划),然后考虑UNION ALL –

回答

0

如果你不想重复的代码,然后创建一个结果表像

CREATE PROCEDURE C 
AS 
    CREATE TABLE #foo (bar int ...) 

    INSERT INTO #foo EXEC A 
    INSERT INTO #foo EXEC B 

    SELECT * FROM #foo 
    DROP TABLE #foo 

或只是统一的查询,如果列具有类似的数据类型

CREATE PROCEDURE C 
AS 
    SELECT A.* FROM 
    (
     SELECT DISTINCT 
      TC.*,  MS.* 
     FROM 
      VIEW1 TC, 
      View2 MS 
     WHERE 
      TC.ID = MS.ID 
     ORDER BY 
      TC.Type ASC 
    ) A 
    UNION ALL 
    SELECT B.* FROM 
    (
     SELECT DISTINCT 
      TC.*, MS.* 
     FROM 
      VIEW3 TC, 
      VIEW2 MS 
     WHERE 
      C.ID = MS.ID 
     ORDER BY 
      MS.Date DESC 
    ) B 
2

在存储过程中3号,你使用括号是错误的,它应该是这样的

CREATE PROCEDURE C 
AS  
    SELECT DISTINCT 
     TC.*, MS1.* 
    FROM 
     VIEW1 TC 
    LEFT JOIN 
     VIEW2 MS1 ON MS1.ID = TC.ID 

    UNION 

    SELECT DISTINCT 
     TC2.*, MS2.* 
    FROM 
     VIEW3 TC2 
    LEFT JOIN 
     VIEW2 MS2 on MS2.ID = TC2.ID 

你也可以将存储过程的结果插入临时表中,然后显示临时表的结果:

CREATE TABLE #tempA(Column1 NVARCHAR(50),Column2 NVARCHAR(50),...) 

INSERT INTO #tempA (Column1, Column2, ...) 
EXEC A 

INSERT INTO #tempA (Column1, Column2, ...) 
EXEC B 

SELECT * FROM #tempA