月度归档:2018年04月

mssql sqlserver 采用left right关键字 生成业务单号的方法


摘要:
在ERP系统中,我们一定会接触到生成业务系统单据编号,
通常我们会在数据库中存放业务单据编号规则
—————————————-
left right 关键字可以自动补齐单据编号


例:

    
 /*
当前流水编号为5 
生成一个年份为4为 月份为2为
流水好占用6位
生成最少12的流水号
*/

declare @thisNumber varchar(20)
declare @yearInfo varchar(4)
declare @monthInfo varchar(2)
set @thisNumber ='15'
set @yearInfo ='2018'
set @monthInfo ='02'

declare @tmp varchar(30)
set @tmp ='000000'

---生成流水号占用符方法
if len(@thisNumber)<6
begin
 ---set @tmp = left(@tmp,6-len(@thisNumber))+@thisNumber
 ---或
 ---set @tmp = right(@tmp,6-len(@thisNumber))+@thisNumber
 ---或
 set @tmp = right(@tmp+@thisNumber,6)
end
else
begin
set @tmp =''
end

set @thisNumber = @yearInfo+@monthInfo+@tmp

print '生成单据编号如下:'
print @thisNumber  

通过sqlserver计算指定年份和月份所属月的天数的方法分享


摘要:
近期领导让我们采用代码制作一个日历,制作日历的,首先是需要获取当月有多少天,然后依次绘制出日历,
下文将采用sql脚本获取指定年份和指定月份获取所属月份的天数的方法


  declare @yearInfo varchar(4)
declare @monthInfo varchar(10)
declare @tmp datetime   ---临时变量

set @yearInfo ='2018'   ---指定年份
set @monthInfo ='2'     ---指定月份

/*
实现思路:
  根据当前指定年份和月份,
  1 初始化一个第一天,
  2 加一个月,
  3 再减一天,
  4 取最大的day ---输出结果为指定年份和月份的天数
*/

set @tmp = @yearInfo+'-'+@monthInfo+'-1'  ---第一步
set @tmp = dateadd(month,1,@tmp)          ---第二步
set @tmp = dateadd(day,-1,@tmp)           ---第三步
print '年份:'+@yearInfo+' 月份:'+@monthInfo+'所属月份天数为:'  
print day(@tmp)                           ---第四步 
通过sqlserver计算指定年份和月份所属月的天数的方法分享

通过sqlserver计算指定年份和月份所属月的天数的方法分享

mssql sqlserver 采用merge关键字实现增删改的方法分享


摘要:
下文讲述采用merge关键字实现,联结(左连接 右连接)中的增(insert) 删(delete) 改(update)的操作方法


--目标表A  
CREATE TABLE TargetA(keyId INT,[info] VARCHAR(50))  
--数据源B  
CREATE TABLE SourceB(keyId INT,[info] VARCHAR(50))  
--目标表A 
INSERT INTO TargetA VALUES (1,'可关联数据'),(2,'可关联数据'),
(5,'无法关联数据')  ,(6,'无法关联数据')   
--数据源B
INSERT INTO SourceB VALUES (1,'test_1'),(2,'test_2'),(3,'test_3'),(4,'test_4')  
 
--注意事项   
---数据库源可以是一个子查询、视图、函数等能返回集合的sql脚本
---merge关键字结尾必须使用分号
---merge中insert update delete 都只能对target表,进行操作

MERGE INTO TargetA AS a     --此处可采用 merge top (10) 限制操作的行数   
USING SourceB AS b          --关联的源数据
ON a.keyId=b.keyId  
WHEN MATCHED            --当两者的keyId匹配成功,执行targetA的更新操作,这类类似内连接  
    THEN UPDATE SET a.[info] = b.[info] 
WHEN NOT MATCHED        --keyId匹配不成功 类似左连接 when not matched 等同于 when not matched by target 
    THEN INSERT VALUES(b.keyid,b.[info])    ---执行插入操作
WHEN NOT MATCHED BY SOURCE --target表中存在,source表中不存在 类似于 a right join b的右连接的方式 
    THEN DELETE      ---删除target表中的数据
OUTPUT $ACTION AS [操作方式]  
    ,INSERTED.keyId AS [插入keyId]  
    ,INSERTED.[info] AS [插入info]  
    ,DELETED.keyId AS [删除keyId]  
    ,DELETED.[info] AS [删除info]  
;  
  
SELECT * FROM SourceB AS st  
SELECT * FROM TargetA AS tt  
go
drop table TargetA
drop table SourceB
go
mssql_sqlserver_merge_insert_update_delete应用

mssql_sqlserver_merge_insert_update_delete应用