环思产品论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2199|回复: 0
打印 上一主题 下一主题

[26981]新DB脚本管理

[复制链接]

72

主题

76

帖子

533

积分

高级会员

Rank: 4

积分
533
跳转到指定楼层
楼主
发表于 2016-3-10 17:50:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuyang 于 2016-6-15 11:55 编辑

概要:不同项目,产品的需求不同,所以在脚本里面的存储过程也会有不一样的改变,在不改变原来存储过程的基础上,就需要加一个分支来区别不同项目
一、项目分支视频示例:

二、文档说明
1打开新DB脚本,找到你所要改的脚本,然后打开该脚本的目录

2、
在目录里复制出来一条,后缀写上你的项目编号(例如:FJHX),保存后把该脚本拖到DB
脚本管理里


3、在脚本信息里
名称:与原来的脚本名称一致,把写的后缀(例:FJHX)去掉
项目:输入项目编号(FJHX)选择你的项目
文件名:你在目录里写的什么就是什么,不需要改变
保存之后速查,你查不到你刚刚新增的脚本是因为你选的是仅当前项目,
所以在高级下面把【仅当前项目勾选掉】就可以查到该单据号的所有脚本
然后打开这新增的脚本,写入你的脚本提交同步就可以了


同步时,Svn未同步,不允许同步,所以要先同步Svn
【同步选中项】同步你选中的这个脚本
【同步所有】同步所有的脚本
【打开文件】打开脚本的sql,对进行进行修改
【打开目录】查看该脚本的目录

UI显示与控制

Svn提交下拉里也有很多功能

【SVNUpdata】SVN更新

【重新生成脚本】脚本重新生成

【自动规范代码】自动整理不规范的代码

【添加调试代码】在代码里加入调试代码,方便查看错误信息的准确点在哪

【复制到产品】复制该脚本到其他产品,填写产品名称

【剪切到产品】剪切该脚本到其他产品,填写产品名称

【打开文件目录】和界面左侧索引部分打开目录一样

【打开文件】和界面左侧索引部分打开文件一样




三、update更新
单表更新
UPDATE A
SET bUsable=1
FROM dbo.saUser A
WHERE A.iIden=1
多表更新
①UPDATE A
SET bUsable=1
FROM dbo.saUser A
JOIN dbo.pbCompany B(NOLOCK) ON B.iIden=A.iCompanyId
WHERE B.iIden=1 AND A.sUserNo='caizh'
②UPDATE A
SET sUserName=B.sName
FROM dbo.saUser A
JOIN dbo.pbUser B(NOLOCK) ON B.sUserNo=A.sUserNo
WHERE A.bUsable=1 AND B.bUsable=1
注意:多表更新时,需要更新的表不添加NOLOCK,其它查询表要添加NOLOCK
四、UPDATE中变量的应用
[a]Update语法中的SET中允许使用@变量,执行顺序是先执行@变量的计算,再执行字段的写入
示例:要求将年龄大于20岁的学生的年龄+1
①UPDATE A
SET iAge+=1
FROM dbo.Student A
WHERE A.iAge>20
②UPDATE A
SET @i=A.iAge
,iAge=@i+1
FROM dbo.saUser A
WHERE A.iAge>20
③UPDATE A
SET iAge=@i+1
,@i=A.iAge
FROM dbo.saUser A
WHERE A.iAge>20 注意:以上三段SQL效果完全等同
【c】问题1:请取出#File表中的文件名的串联
i. SELECT sFile='D:\Work\DB\A.sql'
ii. INTO #File
iii. INSERT INTO #File
iv. SELECT sFile='D:\Work\DB\Procedure\B.cs'
v. 要求使用一条Update语句,去除文件名中的路径,执行后表中两行数据分别为: A.sql,B.cs
vi. 答案如下:

DECLARE @i INT=0,@s NVARCHAR(MAX)=''
UPDATE #File
SET @s=REVERSE(sFile)
,@i=CHARINDEX('\',@s)
,@s=REVERSE(LEFT(@s,@i-1))
,sFile=@s

【d】问题2:出库摊销问题

五、脚本内容

大概过程
--XML转为临时表

EXEC dbo.sppbModifiedXMLToTempTable @sXML=@sXML,@sTempTableList='#sdLteOrderHdr_18378,#sdLteOrderDtl_18378'


--数据保存到表(临时表作为参数传入)

EXEC dbo.sppbGlobalBatchSaveTable @sTableName='sdLteOrderHdr',@sTempTable='#sdLteOrderHdr_18378'
,@iUserId=@iUserId

常见脚本示例:

--客户联系人 数据导出Excel文件


BEGIN TRY
    SET NOCOUNT ON;
    IF ISNULL(@sKeyList,0x)=0x
    BEGIN
        SELECT [公司名称]=B.sCustomerFullName
        ,[联系人]=A.sContactName
        ,[地址]=A.sContactAddress
        ,[职位]=A.sJobTitle
        ,[电话]=A.sContactTel
        FROM dbo.pbCustomerContact A(NOLOCK)
        JOIN dbo.pbCustomer B(NOLOCK) ON B.iIden=A.iHdrId
        WHERE A.bUsable=1
    END
    ELSE
    BEGIN
        SELECT [公司名称]=B.sCustomerFullName
        ,[联系人]=A.sContactName
        ,[地址]=A.sContactAddress
        ,[职位]=A.sJobTitle
        ,[电话]=A.sContactTel
        FROM dbo.pbCustomerContact A(NOLOCK)
        JOIN dbo.pbCustomer B(NOLOCK) ON B.iIden=A.iHdrId
        WHERE A.bUsable=1 AND A.iIden IN (SELECT Item FROM dbo.fnpbConvertStringToTable(@sKeyList,','))
    END
END TRY--客户联系人  Excel数据导入BEGIN TRY
    SET NOCOUNT ON;
    IF OBJECT_ID(N'tempdb..#pbCustomerContact_19831') IS NOT NULL DROP TABLE #pbCustomerContact_19831
    IF ISNULL(@sXML,0x)=0x
        RETURN
    DECLARE @xml XML=@sXML,@s NVARCHAR(MAX)=0x
    SELECT sCustomerName=ISNULL(A.Node.value('(./公司名称)[1]','nvarchar(100)'),0x)
    ,sContactAddress=ISNULL(A.Node.value('(./地址)[1]','nvarchar(200)'),0x)
    ,sContactName=ISNULL(A.Node.value('(./联系人)[1]','nvarchar(50)'),0x)
    ,sJobTitle=ISNULL(A.Node.value('(./职位)[1]','nvarchar(20)'),0x)
    ,sContactTel=ISNULL(A.Node.value('(./电话)[1]','nvarchar(20)'),0x)
    ,iHdrId=CONVERT(INT,0)
    INTO #pbCustomerContact_19831
    FROM @xml.nodes('//Row') A(Node)
    UPDATE A
    SET iHdrId=B.iIden
    FROM #pbCustomerContact_19831 A
    JOIN dbo.pbCustomer B(NOLOCK) ON B.sCustomerFullName=A.sCustomerName
    IF @iUpdateStatus & 2 >0
    BEGIN
        UPDATE A
        SET sContactAddress=B.sContactAddress
        ,sJobTitle=B.sJobTitle
        ,sContactTel=B.sContactTel
        FROM dbo.pbCustomerContact A
        JOIN #pbCustomerContact_19831 B ON B.iHdrId=A.iHdrId AND B.sContactName=A.sContactName
    END
    IF @iUpdateStatus & 1 >0
    BEGIN
        INSERT INTO dbo.pbCustomerContact
        (iIden,iHdrid,sContactName,sContactAddress,sContactTel,bUsable,sJobTitle)
        SELECT iIden=NEXT VALUE FOR dbo.SEQ_NewIden,A.iHdrid,A.sContactName
        ,A.sContactAddress,A.sContactTel,bUsable=1,A.sJobTitle
        FROM #pbCustomerContact_19831 A
        WHERE NOT EXISTS(SELECT TOP 1 1 FROM dbo.pbCustomerContact A1(NOLOCK)
                        WHERE A1.iHdrId=A.iHdrId AND A1.sContactName=A.sContactName)
    END
    IF OBJECT_ID(N'tempdb..#pbCustomerContact_19831') IS NOT NULL DROP TABLE #pbCustomerContact_19831
END TRY
--生成单据号
IF @iUpdateStatus=1
    BEGIN
        SELECT @iProductTypeId=iProductTypeId FROM #sdLteOrderHdr_18378
        EXEC dbo.sppbNewBillNo @iFormulaId=2025,@sNewBillNo=@sBillNo OUTPUT
            ,@sParamNameList='iProductTypeId',@p1=@iProductTypeId   
        UPDATE A
        SET    sBillNo=@sBillNo
        FROM #sdLteOrderHdr_18378 A               
    END
    ELSE IF @iUpdateStatus<>4
    BEGIN
        SELECT TOP 1 @sBillNo=A.sBillNo
        FROM dbo.sdLteOrderHdr A(NOLOCK)
        WHERE A.iIden=@iBillId
    END   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|上海环思 ( 沪ICP备11022428号 )

GMT+8, 2024-9-19 10:59 , Processed in 0.096428 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表