1. 将一个表的数据插入另一个表

情况一:目标表已存在

(1)如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

Insert Into 目标表 Select * From 来源表;
--例如
Insert Into newArticles Select * From articles;

(2)如果只希望导入指定字段,可以用这种方法:

Insert Into 目标表 (字段1, 字段2, ...) Select 字段1, 字段2, ... From 来源表;

情况二:目标表不存在

(1)如果将一个表的数据放在另外一个不存在的表:

Select * Into 目标不存在的表 From 来源表

(2)如果只希望导入指定字段,可以用这种方法:

Select 字段1,字段2,... Into 目标不存在的表 From 来源表

2. sql修改表的字段类型

alter table 表名 alter column 字段名 新的字段类型
--例如
alter table mytable alter column mycol1 int default 0

3. 远程导入表数据(不同服务器数据库之间的数据操作)

方法一:

--创建链接服务器
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 '
 
方法二:
--连接远程/局域网数据(openrowset/openquery/opendatasource)
(1)openrowset
--查询:  select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生成本地表:  select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--把本地表导入远程表:  insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)  select * from 本地表
eg.
insert openrowset('SQLOLEDB', '10.1.23.141\DB2000'; 'sa'; '!QAZ2wsx',SafefoodPt.dbo.Article)
(title,author,riqi,content,ispic,istop,pic,zhaiyao)
select Title,Author,UpdateTime,Content,IncludePic,OnTop,DefaultPicUrl,cast(lmd as varchar(20)) from Article
--更新本地表: 
update b  set b.列A=a.列A 
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
(2)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
 
(3)opendatasource/openrowset
Select *  From opendatasource( 'SQLOLEDB ',  'Data Source=服务器名;User ID=登陆名;Password=密码 ' ).数据库名.dbo.表名
--把本地表导入远程表
4.Ad Hoc Distributed Queries的启用与关闭 

启用Ad Hoc Distributed Queries:

exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

关闭Ad Hoc Distributed Queries:

exec sp_configure 'Ad Hoc Distributed Queries',0

reconfigure

exec sp_configure 'show advanced options',0

reconfigure

5. 用第二个表数据更新主表字段

方式一(适用于多字段):

UPDATE tableA
SET name = B.name, age = B.age
FROM tableA A,tableB B WHERE A.Id = B.Id

方式二(适用于单字段):

UPDATE tableA
SET name = (SELECT B.name FROM tableB B
WHERE B.Id = Id)

6. 添加行号列(row_number()此函数2005后数据库可用)

select row_number()over(order by userid )as RowNum,  *  from  tableName

7.动态语句中添加变量

(1)非字符串类型变量

declare
@Number int,@sql nvarchar(1000)
set @Number = 19;
set @sql = 'select Time, Humidity, EquipmentNum
from DataMonitoring
where Id = '+convert(nvarchar(10),@Number);
exec(@sql);

(2)字符串类型变量

declare
@Char nvarchar(20),@sql nvarchar(1000)
set @Char = '00:00';
set @sql = 'select Time, Humidity, EquipmentNum
from DataMonitoring
where Time = '''+@Char+'''';
exec(@sql);

8.选取数据插入临时表并添加自增行号

declare
@maxRowNum int, @sql nvarchar(1000)
select Time, Humidity, EquipmentNum, RowNum = identity(int,1,1)
into #temp0 from DataMonitoring where Time = '00:00' select @maxRowNum = max(RowNum) from #temp0; set @sql = 'select Time, Humidity, EquipmentNum, RowNum = identity(int,'+convert(nvarchar(10),@maxRowNum+1)+',1)
into ##temp0 from DataMonitoring where Time = ''01:00''';
exec(@sql);
select * from ##temp0 union select * from #temp0 order by RowNum;
drop table #temp0; drop table ##temp0;

9. @Result = @@ROWCOUNT

返回受上一语句影响的行数。 如果行数大于 20 亿,请使用 @@ROWCOUNT_BIG。

10. 在sql存储过程中,不能使用表明变量(如:@tableName),若想使用表明变量只可使用动态Sql语句。

Create Procedure  GetList
@tablename varchar(20)
AS
BEGIN
declare @sqlcommand varchar(max) --sql名称串变量
set @sqlcommand ='select * from '+@tablename --构造这个字符串
exec(@sqlcommand ) --执行sql命令
END
GO

  

SqlServer日常积累(一)的更多相关文章

  1. SqlServer日常积累(三)

    1.TRUNCATE 和 DELETE TRUNCATE操作没有记录删除操作日志 主要的原因是因为 TRUNCATE 操作不会激活触发器,因为TRUNCATE操作不会记录各行删除操作的日志,所以当你需 ...

  2. SqlServer日常积累(二)

    1.Like运算符:将字符串表达式与 SQL表达式中的模式进行比较匹配. 语法 :expression Like 'pattern' ,expression为匹配字段,pattern为匹配字符串.可以 ...

  3. Python 日常积累

    包管理 >from ... import ... 的用法和直接import的区别 直接使用import时,如果需要使用到导入模块内的属性和方法,必须使用模块名.属性和模块名.方法的方式进行调用 ...

  4. 日常积累oracle 有关信息

    对于VARCHAR2类型,我们在内存使用和效率上需要做出一个权衡.对于VARCHAR2(长度>=2000)变量,PL/SQL动态分配内存来存放实际值,但对于VARCHAR2(长度<2000 ...

  5. 日常积累之JSON.stringify和JSON.parse substr

    1.substr(start,len) 从字符串中读取内容,第一个参数是读取的首位置,如果为负数,则从末尾倒数计数. 第二个参数是要读取的长度. eg: var str = "silence ...

  6. 苹果浏览器和uc浏览器在移动端的坑(日常积累,随时更新)

    先mark 1 .  移动端uc浏览器不兼容css3 calc() 2 .  ie8下a标签没有内容给宽高也不能触发点击跳转 3 . safari输入框加上readOnly="ture&qu ...

  7. SQL 性能调优日常积累

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左 ...

  8. SQL 性能调优日常积累【转】

    阅读目录 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) (2)WHERE子句中的连接顺序 (3)SELECT子句中避免使用 ‘ * ‘ (4)减少访问数据库的次数 (5)在SQL*Plu ...

  9. sqlserver日常维护脚本

    SQL code --备份declare @sql varchar(8000) set @sql='backup database mis to disk=''d:\databack\mis\mis' ...

随机推荐

  1. Codeforces Round #298 (Div. 2) D. Handshakes 构造

    D. Handshakes Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/534/problem ...

  2. Codeforces Round #259 (Div. 1) A. Little Pony and Expected Maximum 数学公式结论找规律水题

    A. Little Pony and Expected Maximum Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.c ...

  3. Bootstrap_表格

    Bootstrap 表格 Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. < ...

  4. PHP常量定义之define与const对比

    简要归纳PHP中两个常量定义关键字的区别: 1.define是函数,const是语言结构,PHP编译时const速度快.2.define只能用在类外,const类内类外皆可.3.define定义的常量 ...

  5. cocos2d-x项目101次相遇:使用触摸事件移动 精灵

    cocos2d-x 101次相遇 / 文件夹  1   安装和环境搭建 -xcode  2   Scenes , Director, Layers, Sprites 3   建立图片菜单  4   在 ...

  6. How To Backup Your Android Phone’s Boot, Recovery And System Partition Images -- RomDump

    One can’t stress enough on the importance of backups and when it comes to tinkering with your Androi ...

  7. 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

    这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...

  8. wrote a programming language

    https://medium.freecodecamp.org/the-programming-language-pipeline-91d3f449c919

  9. 埃及分解:将2/n分解成为1/x+1/y的格式

    算法 古埃及以前创造出灿烂的人类文明,他们的分数表示却非常令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比方,2/1 ...

  10. winform datagridview 打印

    转载:http://www.cnblogs.com/Irving/archive/2012/10/12/2721666.html c#实现打印功能 http://www.cnblogs.com/zhc ...