SQL Server从一列中选择最大值,并检查该值是否存在于另一个表中
我正在使用SQL Server,我正在为INSERT语句工作 以下是我的步骤: 步骤1:从表a中的列中选择最高值。该列中的值未序列化。然后加上+1(例如,最高值为45,则此步骤的最终结果为46) 步骤2:然后,检查表B中是否存在46 步骤3:如果表B中存在该数字,则再次递增1并再次检查 你知道我该如何编码吗?如果可能,请使用“序列”。它生成数字值序列,并可在表之间共享 否则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
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…)此外,我无法重新设计数据库,因为该列链接到数千个其他表和系统。谢谢。我试试看。