經典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