|  | Posted by Jason Lepack on 05/30/07 13:33 
I created delete and update triggers... here's the complete ddl.
 CREATE TABLE [dbo].[phone_numbers](
 [num] [int] NOT NULL,
 [phone_name] [varchar](50) NOT NULL,
 [phone] [varchar](50) NOT NULL
 ) ON [PRIMARY]
 GO
 
 
 CREATE UNIQUE NONCLUSTERED INDEX [nat_key] ON [dbo].[phone_numbers]
 (
 [num] ASC,
 [phone] ASC
 ) ON [PRIMARY]
 GO
 
 
 CREATE TABLE [dbo].[phone_output](
 [num] [int] NOT NULL,
 [phone_name] [nvarchar](50) NOT NULL,
 [final_phone] [varchar](max) NULL
 ) ON [PRIMARY]
 GO
 
 
 CREATE TRIGGER [dbo].[insert_final_phone]
 ON  dbo.phone_numbers
 AFTER INSERT
 AS
 BEGIN
 insert into
 phone_output(num, phone_name)
 select distinct
 i.num,
 i.phone_name
 from
 inserted i
 left outer join phone_output p
 on i.num = p.num
 where
 p.num is null
 
 
 update
 phone_output
 set
 final_phone = coalesce(final_phone + '<br>','') +
 phone
 from
 inserted i
 where
 phone_output.num = i.num
 END
 GO
 
 CREATE TRIGGER [dbo].[delete_final_phone]
 ON  dbo.phone_numbers
 AFTER DELETE
 AS
 BEGIN
 update
 phone_output
 set
 final_phone = replace(final_phone, d.phone+'<br>', '')
 from
 deleted d
 where
 phone_output.num = d.num
 
 update
 phone_output
 set
 final_phone = replace(final_phone, d.phone, '')
 from
 deleted d
 where
 phone_output.num = d.num
 
 delete phone_output
 where final_phone = ''
 END
 GO
 
 CREATE TRIGGER [dbo].[update_final_phone]
 ON  dbo.phone_numbers
 AFTER UPDATE
 AS
 BEGIN
 update
 phone_output
 set
 final_phone = replace(final_phone, d.phone+'<br>', '')
 from
 deleted d
 where
 phone_output.num = d.num
 
 update
 phone_output
 set
 final_phone = replace(final_phone, d.phone, '')
 from
 deleted d
 where
 phone_output.num = d.num
 
 delete phone_output
 where final_phone = ''
 
 insert into
 phone_output(num, phone_name)
 select distinct
 i.num,
 i.phone_name
 from
 inserted i
 left outer join phone_output p
 on i.num = p.num
 where
 p.num is null
 
 
 update
 phone_output
 set
 final_phone = coalesce(final_phone + '<br>','') +
 phone
 from
 inserted i
 where
 phone_output.num = i.num
 END
 GO
 
 insert into phone_numbers (num,phone_name,phone) values
 (1,'test1','12345')
 insert into phone_numbers (num,phone_name,phone) values
 (1,'test1','23455')
 insert into phone_numbers (num,phone_name,phone) values
 (1,'test1','68638')
 insert into phone_numbers (num,phone_name,phone) values
 (3,'test3','67684')
 insert into phone_numbers (num,phone_name,phone) values
 (4,'test4','54808')
 insert into phone_numbers (num,phone_name,phone) values
 (4,'test4','74594')
 go
 
 delete phone_numbers where num = 1 and phone = '23455'
 delete phone_numbers where num = 3
 go
 
 update phone_numbers set num = 2 where phone = '54808'
 update phone_numbers set phone = '7686' where phone = '12345'
 go
 
 
 
 On May 29, 2:01 pm, Jason Lepack <jlep...@gmail.com> wrote:
 > I created two tables and a trigger and I have all the functionality
 > that you wanted, without having to create a cursor.  The key is to let
 > the database do the work and this way, any record that validly gets
 > inserted into the phone_numbers table automatically gets put into the
 > phone_output list.
 >
 > If you expect to be deleting or modifying records from the
 > phone_numbers table then you will need to add update and delete
 > triggers.  (Note: for delete, use the replace function)
 >
 > If you need more help, just post back.
 >
 > Cheers,
 > Jason Lepack
 >
 > Try this:
 >
 > -- Begin SQL
 > CREATE TABLE [dbo].[phone_numbers](
 >         [num] [int] NOT NULL,
 >         [phone_name] [varchar](50) NOT NULL,
 >         [phone] [varchar](50) NOT NULL
 > ) ON [PRIMARY]
 > GO
 >
 > CREATE UNIQUE NONCLUSTERED INDEX [nat_key] ON [dbo].[phone_numbers]
 > (
 >         [num] ASC,
 >         [phone] ASC
 > ) ON [PRIMARY]
 > GO
 >
 > CREATE TABLE [dbo].[phone_output](
 >         [num] [int] NOT NULL,
 >         [phone_name] [nvarchar](50) NOT NULL,
 >         [final_phone] [varchar](max) NULL
 > ) ON [PRIMARY]
 > GO
 >
 > CREATE TRIGGER [dbo].[update_final_phone]
 >    ON  dbo.phone_numbers
 >    AFTER INSERT
 > AS
 > BEGIN
 >         insert into
 >                 phone_output(num, phone_name)
 >         select distinct
 >                 i.num,
 >                 i.phone_name
 >         from
 >                 inserted i
 >                 left outer join phone_output p
 >                         on i.num = p.num
 >         where
 >                 p.num is null
 >
 >         update
 >                 phone_output
 >         set
 >                 final_phone = coalesce(final_phone + '<br>','') + phone
 >         from
 >                 inserted i
 >         where
 >                 phone_output.num = i.num
 > END
 > GO
 >
 > insert into phone_numbers (num,phone_name,phone) values
 > (1,'test1','12345')
 > insert into phone_numbers (num,phone_name,phone) values
 > (1,'test1','23455')
 > insert into phone_numbers (num,phone_name,phone) values
 > (2,'test2','68638')
 > insert into phone_numbers (num,phone_name,phone) values
 > (3,'test3','67684')
 > insert into phone_numbers (num,phone_name,phone) values
 > (4,'test4','54808')
 > insert into phone_numbers (num,phone_name,phone) values
 > (4,'test4','74594')
 > go
 >
 > select * from phone_numbers
 > select * from phone_output
 > -- End SQL
 >
 > On May 29, 12:42 pm, Oonz <arund...@gmail.com> wrote:
 >
 >
 >
 > > On May 29, 9:27 pm, Jason Lepack <jlep...@gmail.com> wrote:
 >
 > > > What exactly do you want to do?  Maybe there is a better way of doing
 > > > it that you haven't come across.
 >
 > > > Give a little more detail and more help can be given.
 >
 > > > Cheers,
 > > > Jason Lepack
 >
 > > > On May 29, 12:24 pm, Oonz <arund...@gmail.com> wrote:
 >
 > > > > On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.com> wrote:
 >
 > > > > > Tables don't store data in a logical order.  They store data in a
 > > > > > physical order.  If you want to see data in an ordered fashion then
 > > > > > create a view to do that.  Also, Name is a reserved word, don't use
 > > > > > it...
 >
 > > > > > SELECT
 > > > > >   No,
 > > > > >   NameField,
 > > > > >   Phone
 > > > > > FROM
 > > > > >   yourTable
 > > > > > ORDER BY
 > > > > >   No, NameField, Phone
 >
 > > > > > Cheers,
 > > > > > Jason Lepack
 > > > > > On May 29, 12:04 pm, Oonz <arund...@gmail.com> wrote:
 >
 > > > > > > Hi Friends,
 >
 > > > > > > How can we insert records in sorted order
 >
 > > > > > > like consider a table
 >
 > > > > > > No Name Phone
 > > > > > > 1    test1      12345
 > > > > > > 1    test1      23455
 > > > > > > 2    test2      68638
 > > > > > > 3    test3      67684
 > > > > > > 4    test4      54808
 > > > > > > 4    test4      74594
 >
 > > > > > > if i add a new record like this
 >
 > > > > > > 2   test2       34454
 >
 > > > > > > it should go in specific order. so that the final table should look
 > > > > > > something like this
 >
 > > > > > > No Name Phone
 > > > > > > 1    test1      12345
 > > > > > > 1    test1      23455
 > > > > > > 2    test2      34454
 > > > > > > 2    test2      68638
 > > > > > > 3    test3      67684
 > > > > > > 4    test4      54808
 > > > > > > 4    test4      74594- Hide quoted text -
 >
 > > > > > - Show quoted text -
 >
 > > > > But actually i want to do further processing with that sorted table.
 > > > > Thats why i am in need of such structure
 >
 > > > > Thanks
 > > > > Arunkumar.D- Hide quoted text -
 >
 > > > > - Show quoted text -- Hide quoted text -
 >
 > > > - Show quoted text -
 >
 > > Actually i will combine the multiple numbers into one single record
 >
 > > the temporary table structure would be like this
 >
 > > No Name Phone   FinalPhone
 > > 1    test1      12345  12345
 > > 1    test1      23455  12345<br> 23455
 > > 2    test2      68638  68638
 > > 2    test2      34454  68638<br> 34454<br>
 > > 2    test2   45445  68638<br> 34454<br> 45445
 > > 3    test3      67684  67684
 > > 4    test4      54808  54808
 > > 4    test4      74594  54808<br> 74594
 >
 > > and by using GROUP BY clause i would select single record having all
 > > the
 > > information
 >
 > > No   Name    FinalPhone
 > > 1     test1     12345<br> 23455
 > > 2     test2     68638<br> 34454<br> 45445
 > > 3     test3     67684
 > > 4     test4     54808<br> 74594
 >
 > > this view would be sent to UI for display...
 >
 > > Thanks
 > > Arunkumar.D- Hide quoted text -
 >
 > > - Show quoted text -- Hide quoted text -
 >
 > - Show quoted text -
 [Back to original message] |