繁体   English   中英

SQL Server增量和返回值

[英]SQL Server increment and return value

SQL中是否有类似前缀/后缀增量运算符或模拟它的行为? 理想情况下,我可以这样做:

declare @count int = 0

cast(@count++ as varchar)

期望的输出将为“0”,并且此后每次都更大。

这是我问题的简单表示。

select
    case when x is not null then cast(@count++ as varchar) + ' more text' else '' end +
    case when y is not null then cast(@count++ as varchar) + ' more text' else '' end +
    case when z is not null then cast(@count++ as varchar) + ' more text' else '' end +
    --and so on

无论哪些列为null ,我都需要显示0,1,2,3 ...等。

关于评论中的问题。 你可以使用类似的东西

SELECT *,
       (SELECT CAST(ROW_NUMBER() OVER (ORDER BY Ord) AS VARCHAR(10)) + ' more text '
        FROM   (VALUES (1,low),
                       (2,high),
                       (3,number)) V(Ord, Col)
        WHERE  Col IS NOT NULL
        FOR XML PATH(''), TYPE).value('.','varchar(max)') AS txt
FROM   master..spt_values 

关于问题中的问题。 变量本身是不可能的

我的第一个想法是使用序列代替。

CREATE SEQUENCE S START WITH 1 INCREMENT BY 1 ;
GO

SELECT NEXT VALUE FOR S; -- Increments and returns value

SELECT NEXT VALUE FOR S; -- Increments and returns value

使用变量执行类似操作的相当简单的方法是将其传递给具有单行的虚拟表。 虽然可以很容易地从这个例子中删除变量的使用,而不是直接使用单行的列值作为计数器。

/*Setup*/

DECLARE @T TABLE(X INT);

INSERT INTO @T DEFAULT VALUES;   

DECLARE @Counter INT = 0;

/*Increment variable and return result*/    
UPDATE @T SET @Counter = X = @Counter + 1
OUTPUT INSERTED.X

/*Increment variable and return result*/
UPDATE @T SET @Counter = X = @Counter + 1
OUTPUT INSERTED.X

我不确定你想要什么,但如果你想要一个类似计数器的东西,也许你可以尝试使用row_number()函数:

select
    cont -1 as count
from 
    (
    select 
        row_number()  over (order by number) as cont
    from 
        (select 100 as number union all 
         select 100 as number union all 
         select 100 as number) t0
    ) t1

用你的表改变我设置的例子。 您将获得一个从0开始直到表的行数的计数器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM