一些常用的sql語句

1 、創建表
2、追加字段-刪除字段
3、隨機數
4、時間轉字符串
5、查詢年、月、日
6、Case、When、Then
7、獲取新增Sql的Id
8、增加序號
9、Try-Catch
10、與時間相關的Sql查詢
11、查詢sql執行時間和CPU佔用時間和I/O操作情況
12、替換
13、刪除表、清空表、複製表
14、清理日誌
15、鎖表查詢、解鎖
16、Sql語句性能Top10 
17、查詢 表信息
18、查詢表說明
19、查詢表字段詳情
ok!!!
1 、創建表
--刪除表
--DROP TABLE [dbo].[表名]

--創建表
CREATE TABLE [dbo].[System_Code_InstallationPeriod] (
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Name] nvarchar(50) NULL DEFAULT '默認值',
[TypeId] INT NULL,
[Money] money NULL,
[CreatePeople] nvarchar(50) NULL ,
[CreateTime] datetime NULL ,
[ModifyPeople] nvarchar(50) NULL ,
[ModifyTime] datetime NULL
)

--添加表說明
EXECUTE sp_addextendedproperty N'MS_Description',N'安裝時段表',N'user',N'dbo',N'table',N'[表名]',NULL,NULL
--刪除表說明
--EXEC sp_dropextendedproperty N'MS_Description','user','dbo','table', '[表名]', NULL,NULL

--添加字段說明
EXECUTE sp_addextendedproperty N'MS_Description',N'【創建人】',N'user',N'dbo',N'table',N'[表名]',N'column',N'[字段名]'
EXECUTE sp_addextendedproperty N'MS_Description',N'【創建時間】',N'user',N'dbo',N'table',N'[表名]',N'column',N'[字段名]'
EXECUTE sp_addextendedproperty N'MS_Description',N'【修改人】',N'user',N'dbo',N'table',N'[表名]',N'column',N'[字段名]'
EXECUTE sp_addextendedproperty N'MS_Description',N'【修改時間】',N'user',N'dbo',N'table',N'[表名]',N'column',N'[字段名]'

--刪除字段說明
--EXEC sp_dropextendedproperty N'MS_Description', 'user','dbo', 'table', '表名', 'column','字段名'

2、追加字段-刪除字段
--添加字段
alter table [表名] ADD [字段名]INT NULL;
alter table [表名] ADD [字段名]nvarchar(50) NULL;

--添加字段說明
EXECUTE sp_addextendedproperty N'MS_Description',N'【項目名稱】',N'user',N'dbo',N'table',[表名]',N'column',[字段名]';
EXECUTE sp_addextendedproperty N'MS_Description',N'【項目名稱】',N'user',N'dbo',N'table',[表名]',N'column',[字段名]';

--刪除字段
ALTER TABLE [表名] DROP COLUMN [字段名]
3、隨機數
SELECT ltrim(floor(rand()*10000))
4、時間轉字符串
--2018-11-13
SELECT CONVERT(varchar(50) , GETDATE(), 23 ) AS 'TIME'

--2018-11-13 18:46:14
SELECT CONVERT(varchar(50) , GETDATE(), 20 ) AS 'TIME'

--2019-01-14 17:15:59.920
select convert(varchar(50),GETDATE(),121)
5、查詢年、月、日
SELECT
CONVERT (VARCHAR(4),YEAR(GETDATE())) AS '年',
CONVERT (VARCHAR(4),MONTH(GETDATE())) AS '月',
CONVERT (VARCHAR(4),DAY(GETDATE())) AS '日'
6、Case、When、Then
SELECT
CASE Sex
WHEN 0 THEN '女'
WHEN 1 THEN '男'
ELSE ''
END AS '性別'
FROM
[表名]

SELECT
CASE
WHEN w_grade >= 90 THEN'A'
WHEN w_grade >= 80 AND w_grade <= 89 THEN 'B'
WHEN w_grade >= 70 AND w_grade <= 79 THEN 'C'
WHEN w_grade >= 60 AND w_grade <= 69 THEN 'D'
ELSE 'E'
金融知識www.gendan5.com/topic/businessnews.html
END AS '成績評定'
FROM
[表名]
7、獲取新增Sql的Id
SELECT @@IDENTITY --得到的是跨域最新id

SELECT IDENT_CURRENT('[表名]')--得到的是指定表的最新id

SELECT SCOPE_IDENTITY() --得到的是當前數據庫中的最後插入表的id
8、增加序號
SELECT row_number () OVER (ORDER BY Id) AS '序號' ,* FROM [dbo].[表名]
9、Try-Catch
BEGIN TRY
SELECT 5 / 0
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '錯誤描述',
ERROR_NUMBER() AS '錯誤號',
ERROR_SEVERITY() AS '嚴重級別',
ERROR_STATE() AS '錯誤狀態號',
ERROR_LINE() AS '出錯的行號',
ERROR_PROCEDURE() AS '發生錯誤的存儲過程名或觸發器名'
END CATCH
10、與時間相關的Sql查詢
--20190306094000
select convert(varchar(8),GETDATE(),112)+replace(convert(varchar(8),GETDATE(),114),':','')

--20190306094332437
select convert(varchar(8),GETDATE(),112)+replace(convert(varchar(12),GETDATE(),14),':','')

--當月天數
select day(dateadd(ms,-3,DATEADD(m, DATEDIFF(m,0,getdate())+1,0)))

---當月第一天
select dateadd(d,-day(getdate())+1,getdate())

---當月最後一天
select dateadd(d,-day(getdate()),dateadd(m,1,getdate()))

--明年上月的最後一天此時
select dateadd(d,-day(getdate()),dateadd(m,12,getdate()))

--當月第一個星期一
SELECT DATEADD(wk, DATEDIFF(wk, '', DATEADD(dd, 6 - DAY(getdate()), getdate())), '')

--今天的所有數據
select * from [表名] where DateDiff(dd,CreateTime,getdate())=0

--昨天的所有數據
select * from [表名] where DateDiff(dd,CreateTime,getdate())=1

--7天內的所有數據
select * from [表名] where DateDiff(dd,CreateTime,getdate())<=7

--30天內的所有數據
select * from [表名] where DateDiff(dd,CreateTime,getdate())<=30

--本月的所有數據:
select * from [表名] where DateDiff(mm,CreateTime,getdate())=0

--本年的所有數據
select * from [表名] where DateDiff(yy,CreateTime,getdate())=0

--查詢今天是今年的第幾天
select datepart(dayofyear,getDate())

--查詢今天是本月的第幾天
select datepart(dd, getDate())
select day(getDate())

--查詢本週的星期一日期是多少 (注意:指定日期不能是週日,如果是週日會計算到下週一去。所以如果是週日要減一天)
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)

--查詢昨天日期
select convert(char,dateadd(DD,-1,getdate()),121)

--查詢本月第一天日期
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) as firstday

--查詢本月最後一天日期
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) as lastday

--本月有多少天
select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast((cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' ) as datetime ))))

--求兩個時間段相差幾天
select datediff(day,'2016/5/17','2016/8/20') as daysum

--在指定的日期上±N天
select convert(char,dateadd(dd,1,getdate()),111) as riqi

--在指定的日期上±N分鐘://查詢當前時間15分鐘之前的日期
select dateadd(mi,-15,getdate())
11、查詢sql執行時間和CPU佔用時間和I/O操作情況
--查看執行時間和cpu佔用時間

set statistics time on
select * from [表名]
set statistics time off

--查看查詢對I/0的操作情況

set statistics io on
select from [表名]
set statistics io off
12、替換
UPDATE [表名] SET [字段] = replace([字段], '替換前內容', '替換後內容');
13、刪除表、清空表、複製表
DROP TABLE 表名稱 --刪除表
TRUNCATE TABLE 表名稱 --清空表中的數據
select
into 目標表名 from 源表名
14、清理日誌
USE [master]
GO
ALTER DATABASE 要清理的數據庫名稱 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 要清理的數據庫名稱 SET RECOVERY SIMPLE --簡單模式
GO
USE 要清理的數據庫名稱
GO
DBCC SHRINKFILE (N'要清理的數據庫名稱_log' , 2, TRUNCATEONLY) --設置壓縮後的日誌大小爲2M,可以自行指定
GO
USE [master]
GO
ALTER DATABASE 要清理的數據庫名稱 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 要清理的數據庫名稱 SET RECOVERY FULL --還原爲完全模式
GO
15、鎖表查詢、解鎖
--查看被鎖表:
SELECT
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
FROM
sys.dm_tran_locks
WHERE
resource_type = 'OBJECT'
ORDER BY request_session_id ASC

-- 解鎖:
DECLARE @spid INT
SET @spid = 52 --鎖表進程
DECLARE @SQL VARCHAR (1000)
SET @SQL = 'kill ' + CAST (@spid AS VARCHAR)
EXEC (@SQL)
16、Sql語句性能Top10 
SELECT TOP 10
st.text AS [父級完整語句],
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) as [統計對應的部分語句],
CAST( ((qs.total_elapsed_time / 1000000.0)/qs.execution_count) AS DECIMAL(28,2) ) AS [平均消耗秒數],
CAST(qs.last_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最後完成消耗秒數],
qs.last_execution_time AS [最後執行時間],
CAST(qs.min_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最小消耗秒數],
CAST(qs.max_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最大消耗秒數],
CAST(qs.total_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [總消耗秒數],
(qs.execution_count) AS [總執行次數],
creation_time AS [編譯計劃的時間],
CAST(qs.last_worker_time / 1000000.0 AS DECIMAL(28, 2)) AS [最後完成佔用CPU秒數]
from sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE qs.last_execution_time>DATEADD(n,-30,GETDATE())
ORDER BY qs.last_worker_time DESC
17、查詢 表信息
SELECT
表名=case when a.colorder=1 then d.name else '' end,
表說明=case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序號=a.colorder,
字段名=a.name,
標識=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主鍵=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) then '√' else '' end,
類型=b.name,
佔用字節數=a.length,
長度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小數位數=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允許空=case when a.isnullable=1 then '√'else '' end,
默認值=isnull(e.text,''),
字段說明=isnull(g.[value],'')
FROM syscolumns a
left join systypes b on a.xusertype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
--where d.name='[表名]' --如果只查詢指定表,加上此條件
order by a.id,a.colorder
18、查詢表說明

SELECT
表名 = d.name,
表說明 = isnull(f. VALUE, ''),
表查詢 = 'SELECT TOP 10 FROM ' +d.name+';',
表說明 = '--' + CONVERT(varchar(100),isnull(f. VALUE, ''))
FROM
sysobjects d
LEFT JOIN sys.extended_properties f ON d.id = f.major_id
AND f.minor_id = 0
WHERE
d.xtype = 'U'
AND d.name <> 'dtproperties'
--and d.Name like '%[表名]%' --如果只查詢指定表,加上此條件
ORDER BY d.name
19、查詢表字段詳情
SELECT
表名=case when a.colorder=1 then d.name else '' end,
表說明=case when a.colorder=1 then isnull(f.value,'') else '' end,
字段名1=a.name,
字段名5=(SELECT STUFF((SELECT ',' + a.Name FROM syscolumns AS a INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <> 'dtproperties' where d.name='[表名]' FOR XML PATH ('')),1,1,'')),
字段名6=(SELECT STUFF((SELECT ',@' + a.Name FROM syscolumns AS a INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <> 'dtproperties' where d.name='[表名]' FOR XML PATH ('')),1,1,'')),
字段名7=(SELECT STUFF((SELECT ','+ CASE
WHEN b.name = 'nvarchar' THEN 'string'
WHEN b.name = 'int' THEN 'int'
WHEN b.name = 'datetime' THEN 'DateTime'
ELSE 'decimal?'
END +' ' + a.Name FROM syscolumns AS a left join systypes b on a.xusertype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' where d.name='[表名]' FOR XML PATH ('')),1,1,'')),
字段名8='new SqlParameter("@'+a.name+'", '+a.name+'),',
字段名9=case
when b.name = 'nvarchar' then '/// <summary>
///'+ isnull(CONVERT(varchar(100),g.[value]),'')+'
/// </summary>
public string '+a.name+' { get; set; }'
when b.name = 'int' then'/// <summary>
/// '+ isnull(CONVERT(varchar(100),g.[value]),'')+'
/// </summary>
public int '+a.name+' { get; set; }'
when b.name = 'datetime' then'/// <summary>
/// '+ isnull(CONVERT(varchar(100),g.[value]),'')+'
/// </summary>
public DateTime '+a.name+' { get; set; }'
else '/// <summary>
/// '+ isnull(CONVERT(varchar(100),g.[value]),'')+'
/// </summary>
public decimal? '+a.name+' { get; set; }' end,
類型 = case when b.name = 'nvarchar' then b.name +'('+ CONVERT(varchar(50),COLUMNPROPERTY(a.id,a.name,'PRECISION'))+'),' else b.name+',' end,
字段說明1= case when (isnull(CONVERT(varchar(100),g.[value]),'')) ='' then '' else ('--' + isnull(CONVERT(varchar(100),g.[value]),'')) end,
字段說明2= case when (isnull(CONVERT(varchar(100),g.[value]),'')) ='' then '' else ('/
' + isnull(CONVERT(varchar(100),g.[value]),'') + '*/') end,
字段說明3= case when (isnull(CONVERT(varchar(100),g.[value]),'')) ='' then '' else ('//' + isnull(CONVERT(varchar(100),g.[value]),'')) end
FROM syscolumns a
left join systypes b on a.xusertype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
where d.name='[表名]'
order by a.id,a.colorder

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章