zoukankan      html  css  js  c++  java
  • sqlserver创建函数

    USE [BooksBrothersWebOrder]
    GO
    /****** Object:  UserDefinedFunction [dbo].[fx_GetMultiLineContentByRefNo]    Script Date: 07/24/2012 08:47:18 ******/
    SET QUOTED_IDENTIFIER ON
    GO

    /*
    Name:   dbo.fx_GetContentByRefNoWithMultiLine
    Description: --根据RefNo取得Content资料
    Parameters:    
     @RefNo char(8) 订单编号
    Return Values:      
     @CONTENT
    Ref. Tables:
     R  dbo.O_OrderContent
       
    -------------------------------------------------------------------------------------------------     
    Author Name:
    Creation Date:  

    Modification Log: 
    Example:
     select dbo.fx_GetContentByRefNoWithMultiLine('BB000193')
     select * from dbo.fx_GetMultiLineContentByRefNo('BB000005', 'English')
     select dbo.fx_GetContentByRefNo('BB000193')
     select * from O_OrderContent where refno='BB000193'
     select * from M_Type where English='FEL'

    */

    ALTER  FUNCTION [dbo].[fx_GetMultiLineContentByRefNo]
    (
     @RefNo   CHAR(8),
     @Language  CHAR(8)

    )
    RETURNS @ContentLanguage TABLE
    (
     Language NVARCHAR(20),
     Type   NVARCHAR(50),
     Content  NVARCHAR(1000) 
    )
    AS
    BEGIN
     DECLARE @tmpType AS NVARCHAR(50)
     DECLARE @Type AS NVARCHAR(50)
     DECLARE @Content AS NVARCHAR(60)


     --DECLARE @MaxKorea INT,@MaxJapan INT,@MaxTW INT,@MaxCN INT,@MaxMulti INT
     --SELECT @MaxKorea=18,@MaxJapan=19,@MaxTW=13,@MaxCN=13,@MaxMulti=35

     --DECLARE @ContentList AS VARCHAR(1000)
     --DECLARE @SQL AS VARCHAR(1000)
     --SELECT @tmpType='NULL',@Type='',@Content='',@ContentList=''

    if @Language = 'English'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT Type= T.English ,
      Content= Case WHEN  O.Percentage  <= '0' Then ''  Else  O.Percentage +'% ' End  + C.English
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END  
    ELSE if @Language = 'Other'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT N'Type'= T.English + '/' + T.French + '/' + T.German + '/' + T.Italian + '/' + T.Spanish + '/' + T.Greek ,
      Content=Case WHEN O.Percentage  <= 0 Then ''  Else  O.Percentage +'% ' End + C.English  + '/' + C.French + '/' + C.German + '/' + C.Italian + '/' + C.Spanish + '/' + C.Greek
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END
    ELSE if @Language = 'Korean'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT Type= T.Korean ,
      Content= Case WHEN O.Percentage  <= 0 Then ''  Else  O.Percentage +'% ' End  + C.Korean
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END
    ELSE if @Language = 'Japanese'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT Type= T.Japanese ,
      Content= Case WHEN O.Percentage  <= 0 Then ''  Else  O.Percentage +'% ' End + C.Japanese
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END
    ELSE if @Language = 'Chinese'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT Type= T.Chinese ,
      Content= Case WHEN O.Percentage  <= 0 Then ''  Else  O.Percentage +'% ' End + C.Chinese
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END
    ELSE if @Language = 'Taiwan'
    BEGIN
      DECLARE myCursor CURSOR FOR
     SELECT Type= T.Taiwan ,
      Content= Case WHEN O.Percentage  <= 0 Then ''  Else  O.Percentage +'% ' End + C.Taiwan
     FROM dbo.O_OrderContent O
      LEFT JOIN dbo.M_Type T ON T.Type=O.Type
      LEFT JOIN dbo.M_Content C ON C.ContCode=O.ContentCode
      LEFT JOIN dbo.O_OrderMaster M ON M.RefNo=O.RefNo
     WHERE O.RefNo=@RefNo
     ORDER BY O.TypeSequence,O.ContSequence
    END
     OPEN myCursor --开启游标

     
     

     FETCH NEXT FROM myCursor INTO @Type,@Content
     WHILE @@FETCH_STATUS=0
     BEGIN
      --IF @tmpType<>@Type
      --BEGIN
      -- IF @tmpType='NULL'
      --  SELECT @ContentList= @Type+'+'+@Content+';' 
      -- ELSE
      -- BEGIN
      --  --去掉最后的符号
      --  IF LEN(@ContentList)>0 
      --   SELECT @ContentList=LEFT(@ContentList,LEN(@ContentList)-1)
      --  SELECT @ContentList=@ContentList+ 'chr(13)' + @Type+'+'+@Content+';' 
      -- END
      --END
      --ELSE
      --BEGIN
      -- SELECT @ContentList=@ContentList+@Content+';' 
      --END

      IF(@tmpType<>@Type) or (@tmpType is null)
       INSERT INTO @ContentLanguage SELECT  @Language,@Type,@Content
         ELSE
      BEGIN
       INSERT INTO @ContentLanguage SELECT  @Language,'',@Content
      END
      SELECT @tmpType=@Type

      
      
      FETCH NEXT FROM myCursor INTO @Type,@Content
     END
     CLOSE myCursor                   --关闭游标
     DEALLOCATE myCursor

     ----去掉最后的符号
     --IF LEN(@ContentList)>0 
     --SELECT @ContentList=LEFT(@ContentList,LEN(@ContentList)-1)

     RETURN -- @ContentLanguage

    END


     

  • 相关阅读:
    在Mybatis中使用连表查询的一次实际应用
    Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查
    一次org.springframework.jdbc.BadSqlGrammarException ### Error querying database Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException问题排查过程
    商品的spu、sku及其之间的关系
    Java transient关键字的理解
    关于Serializable的一个形象的例子
    一个很大的文件,存放了10G个整数的乱序数列,如何用程序找出中位数。
    Logger.error方法之打印错误异常的详细堆栈信息
    什么是Http无状态?Session、Cookie、Token三者之间的区别
    接口API中的敏感数据基于AES进行安全加密后返回
  • 原文地址:https://www.cnblogs.com/yzenet/p/2605917.html
Copyright © 2011-2022 走看看