sqlserver2005 openRowSet 和row_Number

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:
首先要使用openRowSet必须将sqlserver功能的外围配置中的openRowSet启用。我们看看这个sql语句
SELECT a.*
FROM OPENROWSET('SQLOLEDB','192.168.1.107\sql2k5';'sa';'123',
   'SELECT * FROM data_center.bycommon.LogicEquipment') AS a
这段sql语句的意思是按照ole的方式访问sqlserver数据库,服务期为192.168.1.107\sql2k5,用户名为sa,密码为123。查询的数据是data_center数据库下的bycommon.LogicEquipment表.
 
这个函数具体有什么作用呢?我觉得在我们的项目里最重要的是数据同步。通过OPENROWSET函数你可以很简单的把一个数据库里面的某张表的数据插入到另外一个数据库的一张表。如:
insert into 另一个数据库服务器某张同样结构的表 SELECT a.*
FROM OPENROWSET('SQLOLEDB','192.168.1.107\sql2k5';'sa';'123',
   'SELECT * FROM data_center.bycommon.LogicEquipment') AS a
下来我们看看如何使用row_Number。rownumber实现对行的自动编号
SELECT   *   FROM(SELECT   *,ROW_NUMBER()   OVER   (ORDER   BY   plantId   DESC)   AS   RowNumber   FROM   [bycommon].LogicEquipment) as a
大家看到了,最后一列rowNumber很有规律排列。这个对于一个想得到某个确定行数据的人来说实在是太惊喜了。比如现在我要取第8条数据,那么:
SELECT   *   FROM(SELECT   *,ROW_NUMBER()   OVER   (ORDER   BY   plantId   DESC)   AS   RowNumber   FROM   [bycommon].LogicEquipment) as a where a.rowNumber=8 ,ok轻松搞定。
还有大家有没有发现有了这个东西就可以进行对数据进行逐行处理了,类似于游标,写个sql看看。
SELECT   * into #temp  FROM(SELECT   *,ROW_NUMBER()   OVER   (ORDER   BY   plantId   DESC)   AS   RowNumber   FROM   [bycommon].LogicEquipment) as a
首先将数据写入一个临时表temp。现在我要做的是把companyId变为原来的二倍。
declare @i int,@maxId int,@id int
select @maxId=max(rowNumber) from #temp
set @i=1
while @i<
=@maxId 
begin
 select @id=id from #temp where 
rowNumber=@i 
 update bycommon.logicEquipment set companyId=companyId*2 where 
id=@id 
 set @i=@i+1
end



本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/297730,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
关系型数据库 MySQL
Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column
原文:Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
3233 0
|
11月前
|
SQL 存储 关系型数据库
MySQL中count(*)和information_schema.tables中的table_rows值不相同
MySQL中count(*)和information_schema.tables中的table_rows值不相同
279 0
|
12月前
|
SQL 移动开发 Oracle
Oracle中rownum和row_number()
Oracle中rownum和row_number()
596 0
|
SQL 关系型数据库 MySQL
MySQL:The used SELECT statements have a different number of columns
执行SQL报错:The used SELECT statements have a different number of columns
531 0
MySQL:The used SELECT statements have a different number of columns
|
移动开发 关系型数据库 MySQL
MySQL 8.0窗口函数--row_number over..应用
EG:取出没门课程的第一名: CREATE TABLE window_test (id int, name text, subject text, score numeric ); INSERT INTO window_test VALUES (1,'小黄','数学',99.
16565 0
|
SQL 测试技术
深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
原文:深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数 概述 COLUMNS_UPDATED函数能够出现在INSERT或UPDATE触发器中AS关键字后的任何位置,用来指示表或视图中有哪些列已被插入或者更新。
1175 0