Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 Server中的表并更新特定计数索引处的列_Sql Server_Database_Tsql - Fatal编程技术网

Sql server 循环SQL Server中的表并更新特定计数索引处的列

Sql server 循环SQL Server中的表并更新特定计数索引处的列,sql-server,database,tsql,Sql Server,Database,Tsql,我正在尝试使用列下面的值更新列值,我正在使用循环来尝试实现这一点。请参阅我尝试更新的字段的屏幕截图 i、 我正试图将第二行的细节更新为第一行的参考 DECLARE@CTRw INT 设置为@CTRw=2 而@CTRw我知道铅可能是答案。但我总是使用ID+1上的自连接来实现这一点 我知道你在做什么,这将无需循环即可完成: 步骤1-使用下一行更新引用: Update main set Reference = left(next.Details,50) from SBSA_Loaded main j

我正在尝试使用列下面的值更新列值,我正在使用循环来尝试实现这一点。请参阅我尝试更新的字段的屏幕截图

i、 我正试图将第二行的细节更新为第一行的参考

DECLARE@CTRw INT
设置为@CTRw=2

而@CTRw我知道铅可能是答案。但我总是使用ID+1上的自连接来实现这一点

我知道你在做什么,这将无需循环即可完成:

步骤1-使用下一行更新引用:

Update main
set Reference = left(next.Details,50)
from SBSA_Loaded main
join SSBA_Loaded next on main.ID+1=next.ID
步骤2-删除偶数行:

Delete from SBSA_Loaded
where ID % 2 = 0  --MOD looks at the remainder of division

我知道答案可能在这里。但我总是使用ID+1上的自连接来实现这一点

我知道你在做什么,这将无需循环即可完成:

步骤1-使用下一行更新引用:

Update main
set Reference = left(next.Details,50)
from SBSA_Loaded main
join SSBA_Loaded next on main.ID+1=next.ID
步骤2-删除偶数行:

Delete from SBSA_Loaded
where ID % 2 = 0  --MOD looks at the remainder of division

您可以使用modus
%
lead

declare @T table (pk int identity primary key, descr varchar(20), val 

varchar(20));
insert into @T (descr) VALUES ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description')
                            , ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description')
                            , ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description');
select *
     , pk % 2 as modus
from @T t;

with cte as 
( select *
       , lead(descr) over (order by pk) as leadDescr
  from @T t
)

update t 
set val = LEFT(leadDescr, 4)
from CTE t 
where pk % 2 = 1;

select *
from @T t;

pk          descr                val                  modus
----------- -------------------- -------------------- -----------
1           odd description      NULL                 1
2           even description     NULL                 0
3           odd description      NULL                 1
4           even description     NULL                 0
5           odd description      NULL                 1
6           even description     NULL                 0
7           odd description      NULL                 1
8           even description     NULL                 0
9           odd description      NULL                 1
10          even description     NULL                 0
11          odd description      NULL                 1
12          even description     NULL                 0
13          odd description      NULL                 1
14          even description     NULL                 0
15          odd description      NULL                 1
16          even description     NULL                 0
17          odd description      NULL                 1
18          even description     NULL                 0
19          odd description      NULL                 1
20          even description     NULL                 0
21          odd description      NULL                 1

pk          descr                val
----------- -------------------- --------------------
1           odd description      even
2           even description     NULL
3           odd description      even
4           even description     NULL
5           odd description      even
6           even description     NULL
7           odd description      even
8           even description     NULL
9           odd description      even
10          even description     NULL
11          odd description      even
12          even description     NULL
13          odd description      even
14          even description     NULL
15          odd description      even
16          even description     NULL
17          odd description      even
18          even description     NULL
19          odd description      even
20          even description     NULL
21          odd description      NULL

您可以使用modus
%
lead

declare @T table (pk int identity primary key, descr varchar(20), val 

varchar(20));
insert into @T (descr) VALUES ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description')
                            , ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description')
                            , ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description'), ('even description'), ('odd description');
select *
     , pk % 2 as modus
from @T t;

with cte as 
( select *
       , lead(descr) over (order by pk) as leadDescr
  from @T t
)

update t 
set val = LEFT(leadDescr, 4)
from CTE t 
where pk % 2 = 1;

select *
from @T t;

pk          descr                val                  modus
----------- -------------------- -------------------- -----------
1           odd description      NULL                 1
2           even description     NULL                 0
3           odd description      NULL                 1
4           even description     NULL                 0
5           odd description      NULL                 1
6           even description     NULL                 0
7           odd description      NULL                 1
8           even description     NULL                 0
9           odd description      NULL                 1
10          even description     NULL                 0
11          odd description      NULL                 1
12          even description     NULL                 0
13          odd description      NULL                 1
14          even description     NULL                 0
15          odd description      NULL                 1
16          even description     NULL                 0
17          odd description      NULL                 1
18          even description     NULL                 0
19          odd description      NULL                 1
20          even description     NULL                 0
21          odd description      NULL                 1

pk          descr                val
----------- -------------------- --------------------
1           odd description      even
2           even description     NULL
3           odd description      even
4           even description     NULL
5           odd description      even
6           even description     NULL
7           odd description      even
8           even description     NULL
9           odd description      even
10          even description     NULL
11          odd description      even
12          even description     NULL
13          odd description      even
14          even description     NULL
15          odd description      even
16          even description     NULL
17          odd description      even
18          even description     NULL
19          odd description      even
20          even description     NULL
21          odd description      NULL

阅读
LEAD()
LAG()
。一般来说:尽可能避免循环…提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。@Shnugo感谢它做了这个把戏,从不知道那些函数。@Shnugo感谢它做了这个把戏,从不知道那些函数。阅读关于
LEAD()
LAG()
。一般来说:尽可能避免循环…提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。@Shnugo感谢它做了这个把戏,从不知道那些函数。@Shnugo感谢它做了这个把戏,从不知道那些函数。LEAD()和LAG()可能不适用于所有环境,因此最好知道如何以其他方式执行此操作。
其中main.Page=1
如果您不能依赖无间隙数字,则可以放置一个
CTE
首先调用
行号()
按现有ID排序,并将此CTE用作
自连接的源代码。
LEAD()并且LAG()可能不适用于所有环境,因此知道如何用其他方法来实现仍然很好。
WHERE main.Page=1
如果您不能依赖无间隙数字,您可以在第一次调用
ROW_NUMBER()时放置一个
CTE
按现有ID排序,并将此CTE用作您的
自连接
构造的源。