• 一道存储过程面试题


    一道存储过程面试题
    users1

      name    company    company_address   url1
      Joe     ABC        Work Lane        abc.com;xyz.com
      Jill    XYZ        Job Street       abc.com;xyz.com
    写存储过程来创建新表
    users2
      name company    company_address    url1

      Joe  ABC     Work Lane          abc.com
        Joe         ABC        Work Lane          xyz.com
      Jill        XYZ        Job Street         abc.com
        Jill        XYZ        Job Street         xyz.com
    ===========================================================================================================
    drop table users1
    go
    create table users1 (name varchar(10),company varchar(10),company_address varchar(20),url1 varchar(20))
    insert into users1
    select 'Joe','ABC','Work Lane','abc.com;xyz.com'
    union all select 'Jill','XYZ','Job Street','abc.com;xyz.com'

    drop proc up_test
    go
    create proc up_test
    as
    if exists(select 1 from sysobjects where type='U' and name='users2')
    drop table users2
    select * into users2
    from (
    select name,company,company_address,left(url1,charindex(';',url1)-1) as url1
    from users1
    union all
    select name,company,company_address,right(url1,len(url1)-charindex(';',url1))
    from users1)t
    order by name,company,company_address
    GO
    exec up_test

    select * from users2
    /*
    name       company    company_address      url1                
    ---------- ---------- -------------------- --------------------
    Jill       XYZ        Job Street           abc.com
    Jill       XYZ        Job Street           xyz.com
    Joe        ABC        Work Lane            xyz.com
    Joe        ABC        Work Lane            abc.com

    (所影响的行数为 4 行)
    */

    ============================================================================================================

    --應該寫function,然後根據;拆分紀錄

    GO
    --FUNCTION
    Create    FUNCTION SplitList
    (@separator char(1), @List varchar(8000))
    RETURNS @ReturnTable TABLE(ListItem varchar(1000) COLLATE Database_Default)
    AS
    BEGIN
    DECLARE @Index int
    DECLARE @NewText varchar(8000)
    IF @List = null
    RETURN
    SET @Index = CHARINDEX(@separator, @List)
    WHILE NOT(@Index = 0)
    BEGIN
    SET @NewText = RTRIM(LTRIM(LEFT(@List, @Index - 1)))
    SET @List = RIGHT(@List, LEN(@List) - @Index)
    INSERT INTO @ReturnTable(ListItem) VALUES(@NewText)
    SET @Index = CHARINDEX(@separator, @List)
        END
     
    INSERT INTO @ReturnTable(ListItem) VALUES(RTRIM(LTRIM(@List)))
            
         RETURN
    END

    GO
    --測試數據
    create table users1(name  varchar(10) ,  company  varchar(20),  company_address  varchar(20), url1 varchar(100) )
    insert into users1 select    'Joe'   ,'ABC'  ,'Work Lane'  ,'abc.com;xyz.com'
    insert into users1 select   'Jill'   ,'XYZ'  ,'Job Street' , 'abc.com;xyz.com'

    create table users2(name  varchar(10) ,  company  varchar(20),  company_address  varchar(20), url1 varchar(100) )
    GO
    --存儲過程

    Create procedure dbo.usp_test
    AS

    declare @name  varchar(10) ,  @company  varchar(20),  @company_address  varchar(20), @url1 varchar(100)
    declare c1 cursor for
    select * from users1
    open c1
    fetch next from c1 into @name,@company,@company_address,@url1
    while @@fetch_status=0
    begin
      insert into users2
       select @name,@company,@company_address,ListItem from dbo.SplitList(';',@url1) T
      fetch next from c1 into @name,@company,@company_address,@url1
    end
    close c1
    deallocate c1

    GO

    exec dbo.usp_test
    select * from users2
    /*
    name    company      company_address           url1
    Joe ABC  Work Lane            abc.com
    Joe ABC  Work Lane            xyz.com
    Jill XYZ  Job Street         abc.com
    Jill XYZ  Job Street          xyz.com

    */

    drop table users1,users2
    drop proc usp_test
    drop function splitlist


     

  • 相关阅读:
    小程序动态添加input(一)
    vue样式穿透
    小程序判断用户是否授权位置信息
    【超详细】MySQL学习笔记汇总(四)之排序查询
    【超详细】MySQL学习笔记汇总(三)之进阶1、2测试
    【超详细】MySQL学习笔记汇总(二)之条件查询
    【超详细】MySQL学习笔记汇总(一)之基础查询
    【超详细】MakeDown(Typora)+PicGo+Gitee实现图床
    JavaDOC生成文档
    学习Hive遇到的问题
  • 原文地址:https://www.cnblogs.com/RobotTech/p/742843.html
Copyright © 2020-2023  润新知