保存到两个表的存储过程

时间:2014-04-14 09:47:47

标签: sql-server

我想存储我从前端得到的@Additional变量的值,格式为'98789797,879879879,987987978'。我想通过删除相同用户名的两个no.s之间的逗号将其存储在表'PhoneNo.s'的不同列中。

  ALTER PROCEDURE [dbo].[AddNewEmployee]
    (       
    @Name   nvarchar(30),
    @SurName    nvarchar(20),
    @Email      nvarchar(30),   
    @Mobile nvarchar(60),
    @Address        nvarchar(65),
    @File nvarchar(40),
    @Country nvarchar(20),
    @State nvarchar(20),
    @City nvarchar(20),
    @Gender nvarchar(10),
    @Additional nvarchar(100)
    )
         AS
         begin
     insert into Users
      ( Name, SurName, Email, Mobile, Address,FilePath,Country,State,City,Gender)
     values
      (@Name, @SurName, @Email, @Mobile,@Address,@File,@Country,@State,@City,@Gender)
   insert into [PhoneNo.s]
      ( 
     UserId,PhoneNo)

     values
      (
    @Name,

    @Additional

     )

   end

我怎样才能实现这一目标?我在sql中并不是那么专业。我看起来很复杂,我无法继续下去!!

1 个答案:

答案 0 :(得分:1)

使用分割功能。这在sql server中工作。您可以将其更改为mysql

CREATE FUNCTION [dbo].[Split]  
(  
 @RowData nvarchar(MAX),
 @SplitOn nvarchar(5)
)    
 RETURNS @ReturnValue TABLE   
(Data NVARCHAR(MAX))   
AS
BEGIN
   Declare @Counter int
   Set @Counter = 1 
 While (Charindex(@SplitOn,@RowData)>0) 
 Begin  
  Insert Into @ReturnValue (data)  
 Select Data = 
  ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
  Set @RowData = 
  Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) 
 Set @Counter = @Counter + 1  
End 
Insert Into @ReturnValue (data)  
Select Data = ltrim(rtrim(@RowData))  
Return  
END

在您的存储过程中

您的第一个插入编码是正确的。将第二个插入编码替换为以下编码。

 DECLARE @PhoneNumber Varchar(MAX)
 SET @PhoneNumber='98798797,897987,9879'
 INSERT INTO AddnewEmployee(name,phonenumber)
 SELECT @name, Data FROM dbo.Split(@phonenumber,',').  

上面的代码将数字拆分并插入每一行,如

 name     phone number

 AJ       98798797
 AJ       897987
 AJ       9879

希望这会对你有所帮助。