1 实现对字符串的Spilt功能。 比如查出“I have a dream!”总共有几个单词,需要以' '分割,然后再求出总数。
ALTER function [dbo].[fc_SpiltString]
(
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
end
return @length
end
GO
2 表连接进行增删改
--INSERT
INSERT INTO [TABLE1]([ID],[NAME],[ClassName])
SELECT S.ID,S.NAME,C.[ClassName] FROM
[STUDENT] AS S INNER JOIN [CLASS] AS C
ON S.CID=C.ID --UPDATE
UPDATE S SET S.NAME='XXX' FROM [STUDENT] AS S
INNER JOIN [CLASS] AS C
ON S.CID=C.ID WHERE .. --DELETE
DELETE S FROM [STUDENT] AS S
INNER JOIN [CLASS] AS C
ON S.CID=C.ID WHERE ..
3 对临时表的基本操作(insert into #temp和select * into #temp )具体实现语句不写,只写怎么判断。
IF (object_id('tempdb..#Temp') is null )
BEGIN
CREATE TABLE #Temp(
Name nvarchar(50) not null, )
END
ELSE
BEGIN
TRUNCATE TABLE #Temp
END
4 开启sql执行统计功能
set statistics io on
set statistics time on
set statistics profile on
5 except 代替not in
select distinct [name] from [T] except select [name] from [T2]
select [name] [name]from [T] where TgtCulture not in (select [name] from [T2])
性能对比
T2:Scan count 1, logical reads 3009
T:Scan count 1, logical reads 2968, SQL Server Execution Times:
CPU time = 124 ms, elapsed time = 127 ms. T2:Scan count 7, logical reads 152215
T:Scan count 3, logical reads 3256
SQL Server Execution Times:
CPU time = 311 ms, elapsed time = 183 ms.
关于排序聚合函数:
row_number() 无重复不可并列的排序;
Rank() 相等的数据并列排序;
over (partition by xx) 按照XX 分组 效果等同于 Group by ;
下面的句子是 按照工资从大到小并且可以并列排名 给每个班级进行排名
select saray, name,groupid,rank() over(partition by groupid order by saray desc) rankId from [UserSarary]
表变量(把表当作参数执行方法或者存储过程)
--建立自定义表类型
create type MyTableV as table (ID int null)
--建立存储过程
create PROCEDURE [dbo].[temptest](
@Source as MyTableV readonly,
@table as MyTableV readonly
)
as
begin
select * from @source;
select * from @table
end
--声明表变量 @source 第一个参数
DECLARE @source TABLE(ID INT)
declare @source MyTableV
insert into @source values(3)
--声明表变量 @table 第二个参数
DECLARE @table TABLE(ID INT)
declare @table MyTableV
insert into @table values(31)
--执行存储过程
exec [temptest] @source,@table