15:不同服务器数据库之间的数据操作
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ', null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '
16:连接远程/局域网数据
A、openrowset
--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 ';'用户名 '; '密码 ',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表
--更新本地表
update b set b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1
B、openquery
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select * FROM openquery( ITSV, 'SELECT * FROM 数据库.dbo.表名 ' )
--把本地表导入远程表
insert openquery( ITSV, 'SELECT * FROM 数据库.dbo.表名 ' ) select * from 本地表
--更新本地表
update b set b.列B=a.列B FROM openquery( ITSV, 'SELECT * FROM 数据库.dbo.表名 ' ) as a inner join 本地表 b on a.列A=b.列A
C、opendatasource/openrowset
SELECT * FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName; User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName; User ID=登陆名; Password=密码 ' ).数据库.dbo.表名
二、SQL Server基本函数
1.字符串函数
DATALENGTH(Char_expr)
返回字符串包含字符数,但不包含后面的空格
SUBSTRING(expression,start,length)
取子串,字符串的下标是从“1”,start为起始位置,length为字符串长度,实际应用中以len(expression)取得其长度
RIGHT(char_expr,int_expr)
返回字符串右边第int_expr个字符,还用left于之相反
ISNULL( check_expression , replacement_value )
如果check_expression为空,则返回replacement_value的值,不为空,就返回check_expression字符操作类
SET NOCOUNT{ON|OFF}
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
SET NOCOUNT为 OFF 时,返回计数
三、小常识
- 在SQL查询中:from后最多可以跟多少张表或视图:256
- 一个字段的最大容量是8000,而对于nvarchar(4000),由于nvarchar是Unicode码。