Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 944
  • Last Modified:

trim Function in Sql Trigger

I need to trim to tables before they are replicated to the other sql databse. I have a database called ResourceFile_FK and it has a table called Entity.

I have another database called sol_impact_db and it has a table called customer.

We have a trigger setup to move data from ResourceFile_FK to Sol_Impact_db and we are running in to a problem because the table Entitiy on ResourceFile_FK has two colum that have character lengths of 100 and the same colums on the customer table are only 30. We can not modity the colums on from 30 to 100 because it will break our solomon application that relies on that database and expects it to be 30. I need to add a line to our existing trigger that will trim anything from those two colums on Entity from 100 to 30 charaters so that it will match the customer table on sol_impact_db.  I have heard of a left / right function but have no idea how to create this.

Here is my current trigger that is setup. I am not a sql developer so sorry if I'm not explaining this in the simplest form. I'll be happy to answer any questions that will help you help me.  Thank you very much for your help.

Here is my current trigger (SOL_Entity_Upd):

CREATE TRIGGER SOL_Entity_Upd  ON [dbo].[Entity]
FOR UPDATE
AS

if ((select trigonoff from trigconfig where trigtype = 'Solomon') = 1)
BEGIN

if update(entitystatus)
begin

declare @orgnbr int
declare @entnbr int
declare @entitystatus varchar(4)
declare @entitystatus_d varchar(4)

select @orgnbr = orgnbr, @entnbr = entnbr, @entitystatus = i.entitystatus
from inserted i

select @entitystatus_d = d.entitystatus
from deleted d

if @entitystatus = 'ACTV' and @entitystatus_d <> 'ACTV' and (select count(idnumber) from alternate_id where idtype = 'imp' and orgnbr = @orgnbr and entnbr = @entnbr) = 1
begin
      set XACT_ABORT on
      exec Sol_Ins_Company @orgnbr, @entnbr
      set XACT_ABORT off
end

end      

END


0
pdiblasi
Asked:
pdiblasi
  • 3
1 Solution
 
DbergertCommented:

LEFT (columname,30)

you should just have to put the above somewhere and repalce the column name with it.


Here is another example:

The example below for the Northwind sample SQL Server database uses the Left function to create a three character ProductCode column from the first three characters of the ProductName column:

SELECT ProductName, LEFT(ProductName, 3) AS ProductCode FROM Products




0
 
Anthony PerkinsCommented:
On a totally unrelated note, you should be aware that Triggers are not executed for every row UPDATEd (INSERTed or DELETEd), but rather executed for every UPDATE (INSERT or DELETE) statement.  How does that affect me, you ask?  If you should update more than one row at a time the following code:

select @orgnbr = orgnbr, @entnbr = entnbr, @entitystatus = i.entitystatus
from inserted i

select @entitystatus_d = d.entitystatus
from deleted d

Will only contain the values from the last row updated.  In other words the Inserted and Deleted logical tables are tables for a reason. If this could occur you will have to place the values of the Inserted/Deleted tables in a CURSOR and execute the Sol_Ins_Company stored procedure for each applicable row.
0
 
artificial_dragonCommented:
substr (columnname, 0,29)
0
 
Anthony PerkinsCommented:
artificial_dragon,

>>substr (columnname, 0,29)<<
Do you mean the T-SQL function SUBSTRING()?  If so it is 1-based not 0-based.  So that should read:
SUBSTRING(columnname, 1, 29)

Which for varchars is funcitonaly equivalent to:
LEFT(columnname, 29)

Which was alaredy suggested ...
0
 
Anthony PerkinsCommented:
Award points to Dbergert
0

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now