Sql 如何组合2个存储过程的结果并将数据组合到网格视图中
我使用的是SQL Server,其中有两个存储过程: 第一个存储过程:Sql 如何组合2个存储过程的结果并将数据组合到网格视图中,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我使用的是SQL Server,其中有两个存储过程: 第一个存储过程: 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 NOCOUN
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
第二存储过程:
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
我想获得这两个存储过程的数据结果,然后将其绑定到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)
如何组合两个存储过程的数据结果?仅供参考,所有列都是从视图中选择的,而不是从表中选择的。如果您不想重复代码,请创建一个结果表,如
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
在存储过程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
是的,我知道,我查过了。删除MySQL和标记SQL Server如果您想使用UNION/UNION组合数据集,所有这些数据集必须具有相同的列数和数据类型(使用select*时这是危险的),然后UNION运算符将强制数据排序以删除重复的数据(不确定您是否计划了),因此请考虑UNION ALL