添加字段
alter table PM_ChangeColor add Status nvarchar(50) default '申请中';
修改字段类型
Alter table PM_AfterDyePlan Alter column BlowingRate nvarchar(50)
删除字段
alter table PM_DyePlan drop column SolidWashingMethod
添加索引
CREATE NONCLUSTERED INDEX [index_PM_ChangeColor_Status] ON PM_ChangeColor
(
[Status] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
唯一索引
CREATE UNIQUE NONCLUSTERED INDEX [UQ_PM_ChangeColor_Status] ON PM_ChangeColor
(
[Status]
) ON [PRIMARY]
联合主键
--先设置非空约束
Alter table PM_BatchNoColorNoRemark alter column sMaterialLot nvarchar(50) not null
Alter table PM_BatchNoColorNoRemark alter column utmColorGUID uniqueidentifier not null
--增加主键
Alter table PM_BatchNoColorNoRemark add constraint pk_PM_BatchNoColorNoRemark primary key(sMaterialLot, utmColorGUID)
分组排名
select A.upbWorkingProcedureGUID,A.CreateDate,RANK() over(partition by A.upbWorkingProcedureGUID order by A.CreateDate) SortCode from PM_WorkPlanLog A
分组排序
select A.upbWorkingProcedureGUID,A.CreateDate,row_number() over(partition by A.upbWorkingProcedureGUID order by A.CreateDate) SortCode from PM_WorkPlanLog A
存储过程事务代码块
BEGIN TRY---------------------开始捕捉异常
BEGIN TRAN------------------开始事务
--程序逻辑
COMMIT TRAN -------提交事务
END TRY-----------结束捕捉异常
BEGIN CATCH------------有异常被捕获
IF @@TRANCOUNT > 0---------------判断有没有事务
BEGIN
ROLLBACK TRAN----------回滚事务
END
-----------执行存储过程将错误信息记录在表当中
END CATCH--------结束异常处理
跨库查询(优化版)
通过连接服务器跨库动态查询并插入临时表(提高效率),跨库查询直接拼接没有走索引,所以使用动态拼接sql让其走索引提升效率
DECLARE @V_Sql varchar(max) = ''
select A.*
into #result
from
(
select '001' as Id
union all
select '002' as Id
)A
select @V_Sql = 'select A.Id,A.Name from [127.0.01].[DB_NAME].[dbo].User A
where A.Id in (' + SUBSTRING(A.whereIn,0,LEN(A.whereIn)) +')
' from
(
SELECT
(
SELECT ''''+ A1.Id +''',' FROM #result A1 WHERE 1=1 FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)') as whereIn
)A
create table #tmp_table
(
Id varchar(50),Name varchar(50)
)
insert into #tmp_table(Id,Name)
exec (''+ @V_Sql + '')
把表转为json
INCLUDE_NULL_VALUES--为空的字段也放出来
WITHOUT_ARRAY_WRAPPER--去掉最外面的[]
left join 可以直接变成表体,或者直接在字段中select一个表
PATH会生成单个对象,AUTO会生成数组[]
如果你在生成的json对象中发现了带有\"的情况,那是因为转义字符被自动添加了。你可以使用JSON_QUERY函数来解决这个问题。
declare @V_json varchar(max) = ''
set @V_json = (
select A.*
,A.prevProcessName AS [customCode.RQGX]
,A.nextProcessName AS [customCode.HZLFS]
,(SELECT moBillNo,moId FROM #tmp_mainMessageList FOR JSON AUTO) AS mergeMOList
,JSON_QUERY((SELECT moBillNo,moId FROM #tmp_mainMessageList FOR JSON AUTO)) AS mergeMOList1
from #tmp_mainMessage A
FOR JSON PATH,INCLUDE_NULL_VALUES,WITHOUT_ARRAY_WRAPPER
)
print @V_json
查询锁死进程并杀死
exec dbo.sp_who_lock
--杀死进程
kill 402
Split函数
CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(max))
RETURNS @ResultTab TABLE (
Id INT ,
Res NVARCHAR(500)
)
AS
BEGIN
DECLARE @Num INT
IF(@string IS NOT NULL AND @string <> '' AND LEN(@string)>0)
BEGIN
IF(CHARINDEX(@separator,@string)>0) --判断要截取的字符是否存在
BEGIN
SET @Num=0
WHILE (CHARINDEX(@separator,@string)>0) --如果要截取的字符存在,就继续循环
BEGIN
SET @Num=@Num+1
INSERT INTO @ResultTab(Id,Res) --截取字符串,插入表变量
SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1)
--把已经截取并插入的字符串删除
SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),'')
END
--如果最后一个截取的字符串为空,那就不插入了
--例如:'0123,0456,0789,' 这样的字符串最后剩下的就是空字符串了
IF(@string IS NOT NULL AND @string <> '')
BEGIN
INSERT INTO @ResultTab(Id,Res)
SELECT @Num+1,@string
END
END
ELSE
BEGIN
INSERT INTO @ResultTab(Id,Res) SELECT 1,@string
END
END
ELSE
BEGIN
DELETE FROM @ResultTab
END
RETURN
END
行转列
使用FOR XML PATH把ID一样的行,通过文本相加到一列,多个文本之间用<br/>隔开,STUFF(1,5)是从1开始到5的字符串位置结束截断掉,把第一个<br/>去掉
SELECT
OR1.BusinessId1,isnull(OR1.Ext1,'') +',' + OR1.Remark + '(' + OR1.UserName +'),' + convert(varchar(10),OR1.CreateTime,121) as Remark
INTO #tmp_StopRecord1
FROM PM_OperationRecord OR1
WHERE OR1.BusinessType='计划暂停'
and OR1.CreateTime >= @V_startDate and OR1.CreateTime <= @V_endDate
SELECT BusinessId1,
STUFF((SELECT '<br/>'+Remark FROM #tmp_StopRecord1
WHERE BusinessId1=A.BusinessId1
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,5,'') AS Remark
INTO #tmp_StopRecord2
FROM #tmp_StopRecord1 A
GROUP BY BusinessId1