Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
SQL Server从一列中选择最大值,并检查该值是否存在于另一个表中_Sql_Sql Server - Fatal编程技术网

SQL Server从一列中选择最大值,并检查该值是否存在于另一个表中

SQL Server从一列中选择最大值,并检查该值是否存在于另一个表中,sql,sql-server,Sql,Sql Server,我正在使用SQL Server,我正在为INSERT语句工作 以下是我的步骤: 步骤1:从表a中的列中选择最高值。该列中的值未序列化。然后加上+1(例如,最高值为45,则此步骤的最终结果为46) 步骤2:然后,检查表B中是否存在46 步骤3:如果表B中存在该数字,则再次递增1并再次检查 你知道我该如何编码吗?如果可能,请使用“序列”。它生成数字值序列,并可在表之间共享 否则 SELECT MAX(MAXVAL) FROM ( SELECT MAX(VAL) AS MAXVAL FRO

我正在使用SQL Server,我正在为INSERT语句工作

以下是我的步骤:

步骤1:从表a中的列中选择最高值。该列中的值未序列化。然后加上+1(例如,最高值为45,则此步骤的最终结果为46)

步骤2:然后,检查表B中是否存在46

步骤3:如果表B中存在该数字,则再次递增1并再次检查

你知道我该如何编码吗?

如果可能,请使用“序列”。它生成数字值序列,并可在表之间共享

否则

SELECT MAX(MAXVAL) FROM 
 (
    SELECT MAX(VAL) AS MAXVAL FROM TableA
    UNION
    SELECT MAX(VAL) AS MAXVAL FROM TableB
 )T

您可以编写递归CTE来实现这一点

下面是示例代码

;WITH CTE AS 
            (
                    SELECT MAX(VAL)+1 AS MAXVAL FROM TableA
            ),CTE2 AS
           ( SELECT MAX(VAL) +1 AS MAXVAL FROM TableB            where exists (SELECT 1 FROM CTE WHERE MAXVAL=TableB.MAXVAL)

)

SELECT MAXVAL FROM CTE2

您好,WhileLoop,我认为您需要While循环,因为这听起来很像可怕的RBAR(一行接一行)处理,这对于SQL Server来说是一个非常糟糕的主意。对于类似的内容,请使用适当的数据库方法-使用
INT IDENTITY
列或
SEQUENCE
对象(SQL Server 2012或更新版本)以适当的关系方式处理类似的内容我同意。当数据库设计交给我时,它是以这种形式存在的,这太糟糕了。主键有000~999,中间有空插槽。(例如030、031、037、040…)此外,我无法重新设计数据库,因为该列链接到数千个其他表和系统。谢谢。我试试看。