经典SQL语句,便于记忆,仅供参考。ip
一、SQL查询重复记录it
Select max(id),col1,col2,COUNT(*) From Table group by col1,col2 having COUNT(*)>1io
二、SQL删除重得记录,仅留一条记录table
delete from Table where ID in (Select max(id) From Table group by col1,col2)ast
三、SQL将一个表中数据批量插入另外一个表中date
3.1 插入已存在的Table1表中 List
insert into Table1(col1,col2,col3) select col1,col2,col3 from Table2 select
3.2 插入不存在的Table1表中 循环
select col1,col2,col3 into Table1 from Table2float
四、SQL从Table2表中抓取数据,批量修改Table1中数据
update Table1 set col1 in (select col1 from Table2 where col2=Table1.col2) where col3='条件内容'
五、SQL产生临时表,仅获取某个表的表结构
select * into #TempTable FROM Table1 WHERE 1<>1
六、SQL存储过程,写过比较长的存储过程
USE [Database] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO-- =============================================-- Author: <Jacker.W>-- Create date: <2015-1-10>-- Description: <增长修改调整每日计划产能信息>-- ============================================= Create PROCEDURE [dbo].[InsUpdPTS] @ptsNo varchar(8000), --设备人工编号 @ptsUse int, --是否启用(0或-1) 默认为-1,即启用 @ptsUnit nvarchar(5), --计时单位 @ptsPD nvarchar(4000), --计划日期 @ptsDayMaxDCP nvarchar(4000),--白班最大产能 @ptsNightMaxDCP nvarchar(4000),--晚班最大产能 @ptsDayDCP nvarchar(4000),--白班可用产能 @ptsNightDCP nvarchar(4000),--晚班可用产能 @ptsTactics int, --计划策略(0不超且跳过已有产能,1可超且跳过已有产能,2不超且覆盖已有产能,3可超且覆盖已有产能) @ptsDayDTH float, --白班计划时长 --白班各段时间设置(上半段正班) @CTS01_S2DAY int, @CTS01_E2DAY int, @CTS01_ST nvarchar(5), @CTS01_ET nvarchar(5), @CTS01_DTH float, @CTS01_USE int, --白班各段时间设置(午休) @CTS02_S2DAY int, @CTS02_E2DAY int, @CTS02_ST nvarchar(5), @CTS02_ET nvarchar(5), @CTS02_DTH float, @CTS02_USE int, --白班各段时间设置(下半段正班) @CTS03_S2DAY int, @CTS03_E2DAY int, @CTS03_ST nvarchar(5), @CTS03_ET nvarchar(5), @CTS03_DTH float, @CTS03_USE int, --白班各段时间设置(晚休) @CTS04_S2DAY int, @CTS04_E2DAY int, @CTS04_ST nvarchar(5), @CTS04_ET nvarchar(5), @CTS04_DTH float, @CTS04_USE int, --白班各段时间设置(加班) @CTS05_S2DAY int, @CTS05_E2DAY int, @CTS05_ST nvarchar(5), @CTS05_ET nvarchar(5), @CTS05_DTH float, @CTS05_USE int, @ptsNightDTH float, --晚班计划时长 --晚班各段时间设置(上半段正班) @CTS11_S2DAY int, @CTS11_E2DAY int, @CTS11_ST nvarchar(5), @CTS11_ET nvarchar(5), @CTS11_DTH float, @CTS11_USE int, --晚班各段时间设置(午休) @CTS12_S2DAY int, @CTS12_E2DAY int, @CTS12_ST nvarchar(5), @CTS12_ET nvarchar(5), @CTS12_DTH float, @CTS12_USE int, --晚班各段时间设置(下半段正班) @CTS13_S2DAY int, @CTS13_E2DAY int, @CTS13_ST nvarchar(5), @CTS13_ET nvarchar(5), @CTS13_DTH float, @CTS13_USE int, --晚班各段时间设置(晚休) @CTS14_S2DAY int, @CTS14_E2DAY int, @CTS14_ST nvarchar(5), @CTS14_ET nvarchar(5), @CTS14_DTH float, @CTS14_USE int, --晚班各段时间设置(加班) @CTS15_S2DAY int, @CTS15_E2DAY int, @CTS15_ST nvarchar(5), @CTS15_ET nvarchar(5), @CTS15_DTH float, @CTS15_USE int, @ptsCAName nvarchar(30), --登记人或最后修改人 @ptsDate datetime --登记日期或最后修改日期 ASbegin TRANSACTION declare @curResNO nvarchar(13) declare @curDayMaxDCP float declare @curNightMaxDCP float declare @curDayDCP float declare @curNightDCP float declare @curPD date declare @posRN int declare @posRN1 int declare @posRN2 int declare @posDMP int declare @posDMP1 int declare @posDMP2 int declare @posNMP int declare @posNMP1 int declare @posNMP2 int declare @posDP int declare @posDP1 int declare @posDP2 int declare @posNP int declare @posNP1 int declare @posNP2 int declare @posPD int declare @posPD1 int declare @posPD2 int declare @endN int DECLARE @errorSum int set @errorsum=0 set @endN=1 set @posRN=1 set @posDMP=1 set @posNMP=1 set @posDP=1 set @posNP=1 --产生临时表结构 select * into #TempPTS FROM Set_MSResPlan_List WHERE 1<>1 set @errorSum=@errorSum+@@ERROR while @endN>=1 begin --获取设备人工编号 set @posRN1 = CHARINDEX('[',@ptsNo,@posRN) set @posRN2 = CHARINDEX(']',@ptsNo,@posRN) if @posRN1>0 and @posRN2>0 and @posRN2>@posRN1 begin set @posRN=@posRN2+1 set @curResNO=SUBSTRING(@ptsNo,@posRN1+1,@posRN2-@posRN1-1) --获取白班最大产能 set @posDMP1 = CHARINDEX('[',@ptsDayMaxDCP,@posDMP) set @posDMP2 = CHARINDEX(']',@ptsDayMaxDCP,@posDMP) set @posDMP=@posDMP2+1 set @curDayMaxDCP=cast(SUBSTRING(@ptsDayMaxDCP,@posDMP1+1,@posDMP2-@posDMP1-1) as float) --获取白班可用产能 set @posDP1 = CHARINDEX('[',@ptsDayDCP,@posDP) set @posDP2 = CHARINDEX(']',@ptsDayDCP,@posDP) set @posDP=@posDP2+1 set @curDayDCP=cast(SUBSTRING(@ptsDayDCP,@posDP1+1,@posDP2-@posDP1-1) as float) --获取晚班最大产能 set @posNMP1 = CHARINDEX('[',@ptsNightMaxDCP,@posNMP) set @posNMP2 = CHARINDEX(']',@ptsNightMaxDCP,@posNMP) set @posNMP=@posNMP2+1 set @curNightMaxDCP=cast(SUBSTRING(@ptsNightMaxDCP,@posNMP1+1,@posNMP2-@posNMP1-1) as float) --获取晚班可用产能 set @posNP1 = CHARINDEX('[',@ptsNightDCP,@posNP) set @posNP2 = CHARINDEX(']',@ptsNightDCP,@posNP) set @posNP=@posNP2+1 set @curNightDCP=cast(SUBSTRING(@ptsNightDCP,@posNP1+1,@posNP2-@posNP1-1) as float) --获取计划日期 set @posPD=1 set @posPD1 = CHARINDEX('[',@ptsPD,@posPD) set @posPD2 = CHARINDEX(']',@ptsPD,@posPD) set @posPD=@posPD2+1 set @curPD=cast(SUBSTRING(@ptsPD,@posPD1+1,@posPD2-@posPD1-1) as date) --开始加载数据 while @posPD1>0 and @posPD2>0 and @posPD2>@posPD1 begin --白班 if @ptsDayDTH>0 and @curDayMaxDCP>0 and @curDayDCP>0 begin if @ptsTactics=0 and @ptsDayDTH<=@curDayDCP begin if not exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班') begin insert into #tempPTS (MS_ResNo,Plan_Use,Plan_Date,Plan_Class,Plan_Units,Plan_DTH,Plan_Creator,Plan_CD,CTS01_S2DAY,CTS01_E2DAY,CTS01_ST,CTS01_ET,CTS01_DTH,CTS01_USE,CTS02_S2DAY,CTS02_E2DAY,CTS02_ST,CTS02_ET,CTS02_DTH,CTS02_USE,CTS03_S2DAY,CTS03_E2DAY,CTS03_ST,CTS03_ET,CTS03_DTH,CTS03_USE,CTS04_S2DAY,CTS04_E2DAY,CTS04_ST,CTS04_ET,CTS04_DTH,CTS04_USE,CTS05_S2DAY,CTS05_E2DAY,CTS05_ST,CTS05_ET,CTS05_DTH,CTS05_USE) values(@curResNO,@ptsUse,@curPD,'白班',@ptsUnit,@ptsDayDTH,@ptsCAName,@ptsDate, @CTS01_S2DAY,@CTS01_E2DAY ,@CTS01_ST ,@CTS01_ET ,@CTS01_DTH,@CTS01_USE , @CTS02_S2DAY,@CTS02_E2DAY ,@CTS02_ST ,@CTS02_ET ,@CTS02_DTH,@CTS02_USE , @CTS03_S2DAY,@CTS03_E2DAY ,@CTS03_ST ,@CTS03_ET ,@CTS03_DTH,@CTS03_USE , @CTS04_S2DAY,@CTS04_E2DAY ,@CTS04_ST ,@CTS04_ET ,@CTS04_DTH,@CTS04_USE , @CTS05_S2DAY,@CTS05_E2DAY ,@CTS05_ST ,@CTS05_ET ,@CTS05_DTH,@CTS05_USE ) set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=1 and @ptsDayDTH<=@curDayMaxDCP begin if not exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班') begin insert into #tempPTS(MS_ResNo,Plan_Use,Plan_Date,Plan_Class,Plan_Units,Plan_DTH,Plan_Creator,Plan_CD,CTS01_S2DAY,CTS01_E2DAY,CTS01_ST,CTS01_ET,CTS01_DTH,CTS01_USE,CTS02_S2DAY,CTS02_E2DAY,CTS02_ST,CTS02_ET,CTS02_DTH,CTS02_USE,CTS03_S2DAY,CTS03_E2DAY,CTS03_ST,CTS03_ET,CTS03_DTH,CTS03_USE,CTS04_S2DAY,CTS04_E2DAY,CTS04_ST,CTS04_ET,CTS04_DTH,CTS04_USE,CTS05_S2DAY,CTS05_E2DAY,CTS05_ST,CTS05_ET,CTS05_DTH,CTS05_USE) values(@curResNO,@ptsUse,@curPD,'白班',@ptsUnit,@ptsDayDTH,@ptsCAName,@ptsDate, @CTS01_S2DAY,@CTS01_E2DAY ,@CTS01_ST ,@CTS01_ET ,@CTS01_DTH,@CTS01_USE , @CTS02_S2DAY,@CTS02_E2DAY ,@CTS02_ST ,@CTS02_ET ,@CTS02_DTH,@CTS02_USE , @CTS03_S2DAY,@CTS03_E2DAY ,@CTS03_ST ,@CTS03_ET ,@CTS03_DTH,@CTS03_USE , @CTS04_S2DAY,@CTS04_E2DAY ,@CTS04_ST ,@CTS04_ET ,@CTS04_DTH,@CTS04_USE , @CTS05_S2DAY,@CTS05_E2DAY ,@CTS05_ST ,@CTS05_ET ,@CTS05_DTH,@CTS05_USE ) set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=2 and @ptsDayDTH <=@curDayDCP begin if exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班') begin Update Set_MSResPlan_List set Plan_Use=@ptsUse,Plan_Units=@ptsUnit,Plan_DTH=@ptsDayDTH,Plan_Alter=@ptsCAName,Plan_MD=@ptsDate, CTS01_S2DAY=@CTS01_S2DAY,CTS01_E2DAY=@CTS01_E2DAY,CTS01_ST=@CTS01_ST,CTS01_ET=@CTS01_ET,CTS01_DTH=@CTS01_DTH,CTS01_USE=@CTS01_USE, CTS02_S2DAY=@CTS02_S2DAY,CTS02_E2DAY=@CTS02_E2DAY,CTS02_ST=@CTS02_ST,CTS02_ET=@CTS02_ET,CTS02_DTH=@CTS02_DTH,CTS02_USE=@CTS02_USE, CTS03_S2DAY=@CTS03_S2DAY,CTS03_E2DAY=@CTS03_E2DAY,CTS03_ST=@CTS03_ST,CTS03_ET=@CTS03_ET,CTS03_DTH=@CTS03_DTH,CTS03_USE=@CTS03_USE, CTS04_S2DAY=@CTS04_S2DAY,CTS04_E2DAY=@CTS04_E2DAY,CTS04_ST=@CTS04_ST,CTS04_ET=@CTS04_ET,CTS04_DTH=@CTS04_DTH,CTS04_USE=@CTS04_USE, CTS05_S2DAY=@CTS05_S2DAY,CTS05_E2DAY=@CTS05_E2DAY,CTS05_ST=@CTS05_ST,CTS05_ET=@CTS05_ET,CTS05_DTH=@CTS05_DTH,CTS05_USE=@CTS05_USE where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班' set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=3 and @ptsDayDTH<=@curDayMaxDCP begin if exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班') begin Update Set_MSResPlan_List set Plan_Use=@ptsUse,Plan_Units=@ptsUnit,Plan_DTH=@ptsDayDTH,Plan_Alter=@ptsCAName,Plan_MD=@ptsDate, CTS01_S2DAY=@CTS01_S2DAY,CTS01_E2DAY=@CTS01_E2DAY,CTS01_ST=@CTS01_ST,CTS01_ET=@CTS01_ET,CTS01_DTH=@CTS01_DTH,CTS01_USE=@CTS01_USE, CTS02_S2DAY=@CTS02_S2DAY,CTS02_E2DAY=@CTS02_E2DAY,CTS02_ST=@CTS02_ST,CTS02_ET=@CTS02_ET,CTS02_DTH=@CTS02_DTH,CTS02_USE=@CTS02_USE, CTS03_S2DAY=@CTS03_S2DAY,CTS03_E2DAY=@CTS03_E2DAY,CTS03_ST=@CTS03_ST,CTS03_ET=@CTS03_ET,CTS03_DTH=@CTS03_DTH,CTS03_USE=@CTS03_USE, CTS04_S2DAY=@CTS04_S2DAY,CTS04_E2DAY=@CTS04_E2DAY,CTS04_ST=@CTS04_ST,CTS04_ET=@CTS04_ET,CTS04_DTH=@CTS04_DTH,CTS04_USE=@CTS04_USE, CTS05_S2DAY=@CTS05_S2DAY,CTS05_E2DAY=@CTS05_E2DAY,CTS05_ST=@CTS05_ST,CTS05_ET=@CTS05_ET,CTS05_DTH=@CTS05_DTH,CTS05_USE=@CTS05_USE where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='白班' set @errorSum=@errorSum+@@ERROR end end end --加载晚班 if @ptsNightDTH>0 and @curNightMaxDCP>0 and @curNightDCP>0 begin if @ptsTactics=0 and @ptsNightDTH<=@curNightDCP begin if not exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班') begin insert into #tempPTS(MS_ResNo,Plan_Use,Plan_Date,Plan_Class,Plan_Units,Plan_DTH,Plan_Creator,Plan_CD,CTS01_S2DAY,CTS01_E2DAY,CTS01_ST,CTS01_ET,CTS01_DTH,CTS01_USE,CTS02_S2DAY,CTS02_E2DAY,CTS02_ST,CTS02_ET,CTS02_DTH,CTS02_USE,CTS03_S2DAY,CTS03_E2DAY,CTS03_ST,CTS03_ET,CTS03_DTH,CTS03_USE,CTS04_S2DAY,CTS04_E2DAY,CTS04_ST,CTS04_ET,CTS04_DTH,CTS04_USE,CTS05_S2DAY,CTS05_E2DAY,CTS05_ST,CTS05_ET,CTS05_DTH,CTS05_USE) values(@curResNO,@ptsUse,@curPD,'晚班',@ptsUnit,@ptsNightDTH,@ptsCAName,@ptsDate, @CTS11_S2DAY,@CTS11_E2DAY ,@CTS11_ST ,@CTS11_ET ,@CTS11_DTH,@CTS11_USE , @CTS12_S2DAY,@CTS12_E2DAY ,@CTS12_ST ,@CTS12_ET ,@CTS12_DTH,@CTS12_USE , @CTS13_S2DAY,@CTS13_E2DAY ,@CTS13_ST ,@CTS13_ET ,@CTS13_DTH,@CTS13_USE , @CTS14_S2DAY,@CTS14_E2DAY ,@CTS14_ST ,@CTS14_ET ,@CTS14_DTH,@CTS14_USE , @CTS15_S2DAY,@CTS15_E2DAY ,@CTS15_ST ,@CTS15_ET ,@CTS15_DTH,@CTS15_USE ) set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=1 and @ptsNightDTH<=@curNightMaxDCP begin if not exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班') begin insert into #tempPTS(MS_ResNo,Plan_Use,Plan_Date,Plan_Class,Plan_Units,Plan_DTH,Plan_Creator,Plan_CD,CTS01_S2DAY,CTS01_E2DAY,CTS01_ST,CTS01_ET,CTS01_DTH,CTS01_USE,CTS02_S2DAY,CTS02_E2DAY,CTS02_ST,CTS02_ET,CTS02_DTH,CTS02_USE,CTS03_S2DAY,CTS03_E2DAY,CTS03_ST,CTS03_ET,CTS03_DTH,CTS03_USE,CTS04_S2DAY,CTS04_E2DAY,CTS04_ST,CTS04_ET,CTS04_DTH,CTS04_USE,CTS05_S2DAY,CTS05_E2DAY,CTS05_ST,CTS05_ET,CTS05_DTH,CTS05_USE) values(@curResNO,@ptsUse,@curPD,'晚班',@ptsUnit,@ptsNightDTH,@ptsCAName,@ptsDate, @CTS11_S2DAY,@CTS11_E2DAY ,@CTS11_ST ,@CTS11_ET ,@CTS11_DTH,@CTS11_USE , @CTS12_S2DAY,@CTS12_E2DAY ,@CTS12_ST ,@CTS12_ET ,@CTS12_DTH,@CTS12_USE , @CTS13_S2DAY,@CTS13_E2DAY ,@CTS13_ST ,@CTS13_ET ,@CTS13_DTH,@CTS13_USE , @CTS14_S2DAY,@CTS14_E2DAY ,@CTS14_ST ,@CTS14_ET ,@CTS14_DTH,@CTS14_USE , @CTS15_S2DAY,@CTS15_E2DAY ,@CTS15_ST ,@CTS15_ET ,@CTS15_DTH,@CTS15_USE ) set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=2 and @ptsNightDTH<=@curNightDCP begin if exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班') begin Update Set_MSResPlan_List set Plan_Use=@ptsUse,Plan_Units=@ptsUnit,Plan_DTH=@ptsDayDTH,Plan_Alter=@ptsCAName,Plan_MD=@ptsDate, CTS01_S2DAY=@CTS11_S2DAY,CTS01_E2DAY=@CTS11_E2DAY,CTS01_ST=@CTS11_ST,CTS01_ET=@CTS11_ET,CTS01_DTH=@CTS11_DTH,CTS01_USE=@CTS11_USE, CTS02_S2DAY=@CTS12_S2DAY,CTS02_E2DAY=@CTS12_E2DAY,CTS02_ST=@CTS12_ST,CTS02_ET=@CTS12_ET,CTS02_DTH=@CTS12_DTH,CTS02_USE=@CTS12_USE, CTS03_S2DAY=@CTS13_S2DAY,CTS03_E2DAY=@CTS13_E2DAY,CTS03_ST=@CTS13_ST,CTS03_ET=@CTS13_ET,CTS03_DTH=@CTS13_DTH,CTS03_USE=@CTS13_USE, CTS04_S2DAY=@CTS14_S2DAY,CTS04_E2DAY=@CTS14_E2DAY,CTS04_ST=@CTS14_ST,CTS04_ET=@CTS14_ET,CTS04_DTH=@CTS14_DTH,CTS04_USE=@CTS14_USE, CTS05_S2DAY=@CTS15_S2DAY,CTS05_E2DAY=@CTS15_E2DAY,CTS05_ST=@CTS15_ST,CTS05_ET=@CTS15_ET,CTS05_DTH=@CTS15_DTH,CTS05_USE=@CTS15_USE where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班' set @errorSum=@errorSum+@@ERROR end end if @ptsTactics=3 and @ptsNightDTH<=@curNightMaxDCP begin if exists(select Plan_Date from Set_MSResPlan_List where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班') begin Update Set_MSResPlan_List set Plan_Use=@ptsUse,Plan_Units=@ptsUnit,Plan_DTH=@ptsDayDTH,Plan_Alter=@ptsCAName,Plan_MD=@ptsDate, CTS01_S2DAY=@CTS11_S2DAY,CTS01_E2DAY=@CTS11_E2DAY,CTS01_ST=@CTS11_ST,CTS01_ET=@CTS11_ET,CTS01_DTH=@CTS11_DTH,CTS01_USE=@CTS11_USE, CTS02_S2DAY=@CTS12_S2DAY,CTS02_E2DAY=@CTS12_E2DAY,CTS02_ST=@CTS12_ST,CTS02_ET=@CTS12_ET,CTS02_DTH=@CTS12_DTH,CTS02_USE=@CTS12_USE, CTS03_S2DAY=@CTS13_S2DAY,CTS03_E2DAY=@CTS13_E2DAY,CTS03_ST=@CTS13_ST,CTS03_ET=@CTS13_ET,CTS03_DTH=@CTS13_DTH,CTS03_USE=@CTS13_USE, CTS04_S2DAY=@CTS14_S2DAY,CTS04_E2DAY=@CTS14_E2DAY,CTS04_ST=@CTS14_ST,CTS04_ET=@CTS14_ET,CTS04_DTH=@CTS14_DTH,CTS04_USE=@CTS14_USE, CTS05_S2DAY=@CTS15_S2DAY,CTS05_E2DAY=@CTS15_E2DAY,CTS05_ST=@CTS15_ST,CTS05_ET=@CTS15_ET,CTS05_DTH=@CTS15_DTH,CTS05_USE=@CTS15_USE where MS_ResNo=@curResNO and Plan_Date=@curPD and Plan_Class='晚班' set @errorSum=@errorSum+@@ERROR end end end --计划日期循环 set @posPD1 = CHARINDEX('[',@ptsPD,@posPD) set @posPD2 = CHARINDEX(']',@ptsPD,@posPD) set @posPD=@posPD2+1 set @curPD=cast(SUBSTRING(@ptsPD,@posPD1+1,@posPD2-@posPD1-1) as date) end end else begin set @endN=0 end end if @ptsTactics=0 or @ptsTactics=1 begin insert into Set_MSResPlan_List select * FROM #TempPTS set @errorSum=@errorSum+@@ERROR end drop table #TempPTS set @errorSum=@errorSum+@@ERROR if @errorSum<>0 begin rollback endelse begin commit TRANSACTION end