T-Sql常用语句

1.用bcp导出txt数据

DECLARE
@bcp VARCHAR(100),
@date VARCHAR(10)

BEGIN
SET @date = REPLACE(CONVERT(VARCHAR, GETDATE() - 2, 111), '/', '-');

SET @bcp = 'bcp WebStat.dbo.[PV_HIS_' + @date + '] out \pvtxt\PV_HIS_' + @date + '.txt -c -T';

--PRINT @bcp;
-- 执行bcp命令
EXEC xp_cmdshell @bcp;

END;

2.动态执行sql

declare @sql varchar(4000)

set @sql='select name' select @sql=@sql+',isnull(sum(case subject when '''+subject+''' then result end),0)['+subject+']'

from (select distinct subject from CJ) as a select @sql=@sql+' from CJ group by Name'

print @sql -- 打印

declare @test varchar(300)

set @test = 'select getdate()'

print @test

exec(@test) --执行sql语句

3. 系统sql语句

--0.查询数据库中所有对象

select * from yourdb.sys.all_objects

--查询数据库中所有的表

select * from yourdb.sys.tables

select * from yourdb.sys.databases

--1 查询所有的数据库名称

select Name FROM Master.dbo.SysDatabases order BY Name

--2 获取所有表名

--XType='U':表示所有用户表;

--XType='S':表示所有系统表;

select name from sysobjects where xtype='U' order by name

--注意:一般情况只需要type = 'U',但有时候会有系统表混在其中

--不知道什么原因,加上后面一句后就能删除这些系统表了

SELECT name FROM sysobjects WHERE type = 'U' AND sysstat = '83'

select * from sysobjects where [type]='u' and xtype='u';

select * from systypes where xusertype=56

--3 获取所有字段名:

select name from syscolumns where id=OBJECT_ID('city') –或视图名

SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length

FROM syscolumns, systypes

WHERE syscolumns.xusertype = systypes.xusertype

AND syscolumns.id = object_id('tableName')

 

4.常用DDL语句

--创建数据库
Create database Users
 

--创建表,添加主、外键

Create table T_Students(

Id int  IDENTITY(1,1) NOT NUL,

StudentNo char(4),

CourseNo char(4),

Score int,

Primary key(Id),

Foreign key(CourseNo) References T_Course(CourseNo)

);
 

--修改表结构,添加字段
Alter table T_Person add NickName nvarchar(50) null;
   

--修改表结构,删除字段
Alter table T_Person Drop column NickName;
 

--删除数据表
Drop table T_Person;
 

--创建索引
Create [Unique] Index <索引名> on <基本表名>(<列明序列>);

 

1group by 功能:分组统计

 

2、having子句,功能:指定组合或者聚合的搜索条件,通常与group by子句一起使用,完成分组查询后在进行筛选

 

3、联合查询 union: 功能:将两个以上的查询结果集组合成一个单个的结果集,该集中包括所有集中的全部行数据

 

4、连接查询,功能:将多个表中的数据查询出来放在一起

 

    1)内连接:使用 = < > 等进行表间某些数据库的比较操作,并列出这些表中与连接条件相匹配的数据行

    如:select * from TableA inner join TableB where A.aid = B.aid

    2)自然连接:指明要查询的列,并排序

    3)外连接:与内连接不同的是,内连接至少要有一个同属于两个表的行符合连接条件时才会返回行,

               外连接会返回符合任意条件的行,它的表有主从之分,用主表中的每行去匹配从表中的行,

               与内连接不同的是,外连接不会丢弃没有匹配的行,而是填充null给结果集。

5、创建一个表的SQL语句

    create table tempTable(

        id int priamry key identity(1,1) not null,

        fieldA nvarchar(20),

        FK_ID int references OtherTable(id)

    )

6、子查询:一个sql语句中嵌套另一个sql语句就叫嵌套查询,而被嵌入的这个语句就叫做子查询。

           子查询也称内部查询,而包含子查询的select语句被称为外部查询,子查询自身可以包含一个或多个子查询,也可以嵌套任意数量的子查询。

7、创建视图:视图就是一个虚表

create View view.tempView

select app.AppManageID,app.CompanyName, app.Passport, app.WebURL, app.ShopType,app.CreateTime from           AppManage as app

inner join PackageInfo as p on app.AppManageID=p.AppManageID

4.表复制

方法1:语句形式为:SELECT vale1, value2 into Table2 from Table1

Table2可以不存在。

方法2:语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

Table2必须存在。

 

 

update 2014-10-10 21:13:25

 

 

1. substring(string,startIndex, length)
select  substring  ( '2013-08-26 14:30:01.543'  , 1  , 10  )
结果:2013-08-26
 
2.dateadd(yy/mm/dd年或月或日,日期加减,日期)
select  dateadd  ( dd  ,- 10  , getdate  ())
结果:2013-08-26 14:37:42.543
 
3.convert(varchar(50), string, 120)
select  convert  ( nvarchar  ( 30  ), '2013-08-26 14:39:53.857' , 120 )
结果:2013-08-26 14:39:53.857
转换日期和字符串的函数
 
4. datename(day/month/weekday, 时间)
select  datename  ( weekday  ,  getdate ())
结果:Thursday
 
 
group by 有一个原则,
就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
 
 
sql中char(9) char(10) char(13)分别代表哪个字符
可以直接用语句查 select char(9) ,char(10), char(13)
查出来全是空白~
那就查ASCII表吧~
char(9) 水平制表符
char(10)换行键
char(13)回车键

char(9) :tab
char(10) :换行
char(13):回车
一般char(10)char(13)连着用,表示0x0A0x0D,即一个完整的回车换行。
 
 
sql 执行顺序:
from -> where -> group by -> having -> select -> order by -> top
 
 
如何收缩数据库?
 
--1.
--前期准备
DUMP TRANSACTION webstat WITH NO_LOG
bACKUP LOG webstat WITH TRUNCATE_ONLY

--2.
webstat :文件名称
——收缩数据库
DBCC SHRINKFILE(N'webstat',916000)


--3.
——查看收缩进度
use master
go
select * from sysprocesses
--cmd='DbccFilesCompact' (查session_id )

SELECT session_id,percent_complete
FROM sys.dm_exec_requests t WHERE session_id=59
go

DUMP TRANSACTION webstat WITH NO_LOG
bACKUP LOG webstat WITH TRUNCATE_ONLY

DBCC SHRINKFILE(N'web',916000)

use master
go

SELECT session_id,percent_complete
FROM sys.dm_exec_requests t WHERE session_id=53

select * from sysprocesses

 

t-sql 动态执行sql语句
 
CREATE procedure [dbo].[pr_state]
as
begin
DECLARE @SQLString NVARCHAR(500)
DECLARE @datetime NVARCHAR(20)
set @datetime =CONVERT(varchar(10), getdate()-1   ,120);
SET @SQLString =N'
      insert into PV_HIS_JifenWall_Report(recorddate,type,count,usercount)
      select '''+@datetime+''' , PageQueryString,count(1) cnt,count(distinct UserAccount)  cntuseraccount
      from [dbo].[PV_HIS_'+ @datetime+ '] a with(nolock) where PageQueryString in
      (''CPAList'',''CPADownload'',''CPAInstall'',''CPAOpen'')
      group by PageQueryString'
--print @SQLString
EXEC sp_executesql @SQLString
end

 

 
 

 

你可能感兴趣的:(t-sql)