Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效地选择真实记录或虚拟/默认记录;“记录”;在.NET/T-SQL中_.net_Sql Server_Tsql - Fatal编程技术网

有效地选择真实记录或虚拟/默认记录;“记录”;在.NET/T-SQL中

有效地选择真实记录或虚拟/默认记录;“记录”;在.NET/T-SQL中,.net,sql-server,tsql,.net,Sql Server,Tsql,我有一个结构来处理单个查询中加载的.NET数据集中的数据。我有一个表,用于覆盖应用程序驱动的默认值。要演示如何生成设置替代表,请执行以下操作: CREATE TABLE TABLE1( PK int IDENTITY(1,1) NOT NULL, VALINT int NOT NULL, DESCRIPTION1 varchar(50) NOT NULL ) 我的代码将生成具有内置默认值的SQL,并将自定义覆盖数据从表合并到查询中,然后返回单个数据集: SELECT C

我有一个结构来处理单个查询中加载的.NET数据集中的数据。我有一个表,用于覆盖应用程序驱动的默认值。要演示如何生成设置替代表,请执行以下操作:

CREATE TABLE TABLE1(
    PK int IDENTITY(1,1) NOT NULL,
    VALINT int NOT NULL,
    DESCRIPTION1 varchar(50) NOT NULL
)
我的代码将生成具有内置默认值的SQL,并将自定义覆盖数据从表合并到查询中,然后返回单个数据集:

SELECT C.VALINT, C.DESCRIPTION1
    FROM (
        SELECT MAX(PK)AS PK, VALINT
        FROM (
            SELECT PK, VALINT
            FROM TABLE1
            UNION
            SELECT 0, 1
            UNION
            SELECT 0, 2
        ) A
        GROUP BY VALINT
    )B, (
        SELECT PK, VALINT, DESCRIPTION1
        FROM TABLE1
        UNION
        SELECT 0, 1, 'Default1Val'
        UNION
        SELECT 0, 2, 'Default2Val'
    ) C
    WHERE B.PK = C.PK AND B.VALINT = C.VALINT
对空表运行此查询,您将只看到查询中定义的两个默认设置。然后可以添加新的自定义替代:

INSERT INTO TABLE1(VALINT,DESCRIPTION1)VALUES(1,'CustomOverride1')

现在重新运行上述查询,您将看到表中的一个自定义值和剩余的一个未被覆盖的默认值。这个查询正是我所需要的,但是当这样做时,表中的数据将在两个不同的时间与默认设置数据联合。是否有一个更优雅的查询可以使用一组联合,或者我只能使用上面演示的两组完整的联合?

您必须选择解决任务所需的方法。 Join用于组合来自不同表的列,union用于组合行

当您合并两个表时,对它们有几个要求

  • 两条select语句的列数必须相同
  • 按顺序排列的列必须具有相同的数据类型

  • 你必须选择你需要用什么来解决你的任务。 Join用于组合来自不同表的列,union用于组合行

    当您合并两个表时,对它们有几个要求

  • 两条select语句的列数必须相同
  • 按顺序排列的列必须具有相同的数据类型

  • 这就是公共表表达式()非常有用的地方

    我还更正了您的联接-不建议使用逗号分隔联接(旧式联接),而是使用显式联接类型

    declare @TABLE1 table (
        PK int IDENTITY(1,1) NOT NULL,
        VALINT int NOT NULL,
        DESCRIPTION1 varchar(50) NOT NULL
    );
    
    WITH cte AS (
        SELECT PK, VALINT, DESCRIPTION1
        FROM @TABLE1
        UNION
        SELECT 0, 1, 'Default1Val'
        UNION
        SELECT 0, 2, 'Default2Val'
    )
    SELECT C.VALINT, C.DESCRIPTION1
    FROM (
        SELECT MAX(PK)AS PK, VALINT
        FROM cte A
        GROUP BY VALINT
    ) B
    inner join cte C on B.PK = C.PK AND B.VALINT = C.VALINT;
    
    返回:

    VALINT  DESCRIPTION1
    1       Default1Val
    2       Default2Val
    
    添加自定义替代将提供:

    INSERT INTO @TABLE1 (VALINT,DESCRIPTION1) VALUES(1,'CustomOverride1');
    
    WITH cte AS (
        SELECT PK, VALINT, DESCRIPTION1
        FROM @TABLE1
        UNION
        SELECT 0, 1, 'Default1Val'
        UNION
        SELECT 0, 2, 'Default2Val'
    )
    SELECT C.VALINT, C.DESCRIPTION1
    FROM (
        SELECT MAX(PK)AS PK, VALINT
        FROM cte A
        GROUP BY VALINT
    ) B
    inner join cte C on B.PK = C.PK AND B.VALINT = C.VALINT;
    
    返回:

    VALINT  DESCRIPTION1
    2       Default2Val
    1       CustomOverride1
    

    这就是公共表表达式()非常有用的地方

    我还更正了您的联接-不建议使用逗号分隔联接(旧式联接),而是使用显式联接类型

    declare @TABLE1 table (
        PK int IDENTITY(1,1) NOT NULL,
        VALINT int NOT NULL,
        DESCRIPTION1 varchar(50) NOT NULL
    );
    
    WITH cte AS (
        SELECT PK, VALINT, DESCRIPTION1
        FROM @TABLE1
        UNION
        SELECT 0, 1, 'Default1Val'
        UNION
        SELECT 0, 2, 'Default2Val'
    )
    SELECT C.VALINT, C.DESCRIPTION1
    FROM (
        SELECT MAX(PK)AS PK, VALINT
        FROM cte A
        GROUP BY VALINT
    ) B
    inner join cte C on B.PK = C.PK AND B.VALINT = C.VALINT;
    
    返回:

    VALINT  DESCRIPTION1
    1       Default1Val
    2       Default2Val
    
    添加自定义替代将提供:

    INSERT INTO @TABLE1 (VALINT,DESCRIPTION1) VALUES(1,'CustomOverride1');
    
    WITH cte AS (
        SELECT PK, VALINT, DESCRIPTION1
        FROM @TABLE1
        UNION
        SELECT 0, 1, 'Default1Val'
        UNION
        SELECT 0, 2, 'Default2Val'
    )
    SELECT C.VALINT, C.DESCRIPTION1
    FROM (
        SELECT MAX(PK)AS PK, VALINT
        FROM cte A
        GROUP BY VALINT
    ) B
    inner join cte C on B.PK = C.PK AND B.VALINT = C.VALINT;
    
    返回:

    VALINT  DESCRIPTION1
    2       Default2Val
    1       CustomOverride1
    

    我认为如果你正确使用
    ISNULL
    LEFT-OUTER-JOIN
    的组合,你应该能够实现你的目标。我认为如果你正确使用
    ISNULL
    LEFT-OUTER-JOIN
    的组合,你应该能够实现你的目标。