select*from dbo.Spec_Value where Spec_Id =(select Id from dbo.Spec where Spec_Name ='版本')
6:写一个视图的sql
--创建视图CREATEVIEW spec_Key_Value ASselect k.Spec_Name,v.*from dbo.Spec k innerjoin dbo.Spec_Value v on k.Id = v.Spec_Id
--查询视图select*from spec_Key_Value
7:创建索引的sql
CREATEINDEX index_name
ON dbo.Spec_Value (Spec_Id)
8:分页存储过程sql
createproc[dbo].[PageList](@PageIndexint,@PageSizeint,@TableNamevarchar(200),@CoumnNamevarchar(500),@Wherevarchar(500),@OrderByvarchar(500),@Countintout)asdeclare@sql nvarchar(2000)set@sql=' select '+@CoumnName+' from (select '+@CoumnName+' ,row_number() over(order by '+@OrderBy+' ) as number from '+@TableName+' where '+@Where+' ) t where t.number between '+ Cast(((@PageIndex-1)*@PageSize+1)asvarchar(200))+' and '+
Cast((@PageIndex*@PageSize)asvarchar(200));print@sql;exec(@sql);set@sql='select count(*) from '+@TableName+' where '+@Where;print@sql;exec sp_executesql @sql,N'@total int out',@total=@Count output
GO
9:写一个触发器sql
createtrigger t_spec on dbo.Spec
instead ofdeleteasbegindeclare@idintselect@id=Id from deleted
deletefrom dbo.Spec where Id=@iddeletefrom dbo.Spec_Value where Spec_Id=@idend
go
--触发deletefrom dbo.Spec where Id=1
10:写一个存储过程包含事务的sql
createproc[dbo].[Proc_InsertSpec_Value]@Spec_Idint,@Spec_Valuevarchar(200),@ModifiedTimedatetime,@CreateTime datetime2
asbeginset nocount on--on表示不返回计数set xact_abort on--当执行事务时,如果出错,会将transcation设置为uncommittable状态begin try
declare@stuCountByNameint;select@stuCountByName=count(*)from dbo.Spec_Value where Spec_value=@Spec_Value;if(isnull(@Spec_Value,'')='')beginprint('名字不能为空');return;endif(@stuCountByName>0)beginprint('名字重复');returnendbegintran--开启事务insertinto dbo.Spec_Value(Spec_Id,Spec_value,ModifiedTime,CreateTime)values(@Spec_Id,@Spec_value,@ModifiedTime,@CreateTime)committran--提交事务end try
begin catch
if xact_state()=-1rollbacktran;--回滚事务select ERROR_NUMBER()as ErrorNumber;select ERROR_MESSAGE()as ErrorMsg;end catch
set xact_abort off;end
--not in方式: 查询6到10条;selecttop5*from dbo.Spec_Value where Id notin(selecttop5 Id from dbo.Spec_Value orderby Id)
select*from dbo.Spec_Value where Id between6and10
13:写一个包含连接和分组,并且根据某个字段拼接的sql
SELECT k.Spec_Name,
STUFF((SELECT','+ Spec_value FROM dbo.Spec_Value v WHERE k.Id = v.Spec_Id FOR XML PATH('')),1,1,'') children
FROM dbo.Spec k
GROUPBY k.Spec_Name ,k.Id
14:写一个包含having写法的sql
select k.Id,k.Spec_Name,COUNT(v.Id)from dbo.Spec k innerjoin dbo.Spec_Value v on k.Id = v.Spec_Id groupby k.Id,k.Spec_Name having k.Id =1
15:写一个包含连接和分组,排序的sql。
select k.Id,k.Spec_Name,COUNT(v.Id)from dbo.Spec k innerjoin dbo.Spec_Value v on k.Id = v.Spec_Id groupby k.Id,k.Spec_Name ORDERBYCOUNT(v.Id)