SqlException(0x80131904):使用UNION,INTERSECT组合的所有查询

时间:2016-01-20 07:53:53

标签: sql asp.net sql-server

查询:

USE [IEC]
GO

ALTER VIEW [dbo].[V_AllOA]
AS
    SELECT ROW_NUMBER() OVER (ORDER BY OrderId) OAId,
           *
    FROM (
        SELECT *
        FROM BranchOrder
        WHERE Flag IN (1, 2)
            UNION
        SELECT *
        FROM BranchOrder12_13
        WHERE flag IN (1, 2)
            UNION
        SELECT *
        FROM BranchOrder11_12
        WHERE flag IN (1, 2)
    ) a

GO

enter image description here

2 个答案:

答案 0 :(得分:2)

您的表BranchOrder,BranchOrder12_13,BranchOrder11_12具有不同的列数。它们必须都具有确切的列数并且它们必须具有相同的顺序 - 我的意思是如果第一个表中的第一列是整数,则其他表中的第一列也必须是整数。

答案 1 :(得分:1)

使用union时,您必须确保所有列,包括 ORDER TYPE 都相同。

例如:table1

ID,  NAME   , LASTNAME
 1  'john'     'smith'

table2 -

ID , NAME , MIDDLENAME , LASTNAME
 4  'john'    'bing'      'smith'

在上面的示例中,两个表都不能使用select *进行联合,因为它们具有不同的列数。

在这种情况下,您可以指定select语句中两个表上显示的相同列,如下所示:

SELECT ID,NAME,LASTNAME from table1
UNION
SELECT ID,NAME,LASTNAME from table2

这是一个正确的查询。

SELECT * FROM table1
UNION
SELECT * FROM TABLE2

这不是一个正确的查询。