目录
判断语句
赋值
IF(@v_count <> 0)
BEGIN
SELECT @v_team_id=team_id FROM TABLE T WHERE T.column=1;
END
ELSE
BEGIN
SET@v_team_name='无';
END
多行转一行
https://www.cnblogs.com/CreateMyself/p/9058380.html
SELECT STUFF((SELECT '/' + T.column FROM Table T FOR XML PATH('')), 1, 1, '');
oracle:listagg
CASE WHEN ELSE END
SELECT CASE column WHEN 'a' THEN 'b' ELSE 'c' END from Table
oracle
select decode(column,'a','b','c') WORK_CERT_TYPE_name from Table
判断某个值是否为null,否则替换
ISNULL(oldTeamID, 0)
oracle
nvl(oldTeamID,0)
执行存储过程,getdate() 直接做参数会报错
SET @startDate = GETDATE();
execute hr.Insert @pUserId, -1, @startDate, null
update 表别名
UPDATE T SET T.TID=1,T.TNAME='Name',T.TClass=1 FROM [TABLE] T WHERE T.ID=10
oracle
UPDATE TABLE T SET T.TID=1,T.TNAME='Name',T.TClass=1 WHERE T.ID=10
创建序列
CREATE SEQUENCE event_seq
MINVALUE 1
MAXVALUE 999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
--使用时
GO
SELECT next value for event_seq
如果设置列默认值为序列的话填入 next value for event_seq
查看数据库最近执行的语句
https://www.cnblogs.com/chenjianxiang/p/7833588.html
SELECT TOP 1000
ST.text AS '执行的SQL语句',
QS.execution_count AS '执行次数',
QS.total_elapsed_time AS '耗时',
QS.total_logical_reads AS '逻辑读取次数',
QS.total_logical_writes AS '逻辑写入次数',
QS.total_physical_reads AS '物理读取次数',
QS.creation_time AS '执行时间' ,
QS.*
FROM sys.dm_exec_query_stats QS
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE QS.creation_time BETWEEN '2019-07-24 00:00:00' AND '2019-07-25 11:00:00'
ORDER BY QS.creation_time desc;
连接符
+
oracle
||
数字 转 字符串 表达式 和去除左右空格
SELECT convert(varchar(10),1234)
SELECT CAST(12 AS varchar(10))
SELECT LTRIM(RTRIM(CAST(user_id AS varchar(20))))
oracle
SELECT to_char(1) FROM dual
trim(to_char(user_id))
分割字符串为表格
ALTER FUNCTION dbo.splitl (
@String VARCHAR(MAX),
@Delimiter VARCHAR(MAX)
) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
BEGIN
DECLARE @idx INT=1
DECLARE @slice VARCHAR(MAX)
IF LEN(@String) < 1 OR LEN(ISNULL(@String,'')) = 0
RETURN
WHILE @idx != 0
BEGIN
SET @idx = CHARINDEX(@Delimiter,@String)
IF @idx != 0
SET @slice = LEFT(@String,@idx - 1)
ELSE
SET @slice = @String
IF LEN(@slice) > 0
INSERT INTO @temptable(items) VALUES(@slice)
SET @String = RIGHT (@String, LEN(@String) - @idx)
IF LEN(@String) = 0
BREAK
END
RETURN
END
SELECT * FROM dbo.splitl('a#b#c#d','#')
来源: https://my.oschina.net/cwalet/blog/267386
oracle
SELECT split(a,b,c#,d, ',') FROM TABLE WHERE column = 1
创建临时表
创建临时表
方法一:
create table #临时表名(字段1 约束条件,
字段2 约束条件,
.....)
方法二:
select * into #临时表名 from 你的表;
select * into ##临时表名 from 你的表;
注:以上的#代表局部临时表,##代表全局临时表
函数返回 table
ALTER FUNCTION [dbo].[returnTable]
(
)
RETURNS @Tables TABLE(one int,two VARCHAR(20),three date ,four date)
AS
BEGIN
INSERT @Tables SELECT * FROM student
RETURN
END
SET NOCOUNT { ON | OFF }
SET NOCOUNT ON
每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢?
答案是这些信息在我们的客户端的应用程序中是没有用的,这些信息是存储过程中的每个语句的DONE_IN_PROC 信息。
我们可以利用SET NOCOUNT 来控制这些信息,以达到提高程序性能的目的。
查询表结构信息
https://blog.csdn.net/wangxw1803/article/details/90749909
SELECT (case when a.colorder=1 then d.name else null end) 表名,
a.colorder 字段序号,a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
(case when (SELECT count(*) FROM sysobjects
WHERE (name in (SELECT name FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
AND (xtype = 'PK'))>0 then '√' else '' end) 主键,b.name 类型,a.length 占用字节数,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,(case when a.isnullable=1 then '√'else '' end) 允许空,
isnull(e.text,'') 默认值,isnull(g.[value], ' ') AS [说明]
FROM syscolumns a
left join systypes b on a.xtype=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.class and f.minor_id=0
where b.name is not null
--WHERE d.name='要查询的表' --如果只查询指定表,加上此条件
order by a.id,a.colorder
查询数据库中的所有数据库名
SELECT Name FROM Master..SysDatabases ORDER BY Name
查询所有用户数据库的表名
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name