String y Execute

15/08/2008 - 01:23 por Victor M | Informe spam
Buenas tarsde tengo un triguer en una tabla de articulos donde cuando se
inserta un articulo
se dispara e inserta en otras tablas el mismo articulo, el problema es que
voy armando un string y al final lo ejecuto con Execute(@sql) el problema
es que si en la descipcion ponen una " ' " ejemplo
Levy's falla por la comilla pongo el codigo para que lo vean y haber si me
pueden dar una ayudita

DECLARE @Codigo char(10),
@Nivel tinyint,
@padre char(10),
@Tipo char(5),
@Afectable char(1),
@Descr char(80),
@Linea char(3),
@Inventa char(1),
@Porc_Desc decimal(12,2),
@Precio decimal(12,2),
@PrecioFecha datetime,
@CostoU decimal(12,2),
@CostoForaneo decimal(12,2),
@Precio_Ant decimal(12,2),
@FechaAnterior datetime,
@inv_ini int,
@Existencia int,
@Repara tinyint,
@Statusx char(1),
@Dama tinyint,
@Caballero tinyint,
@Unisex tinyint,
@Acetato tinyint,
@Metal tinyint,
@Titanio tinyint,
@Ppp tinyint,
@Solar tinyint,
@Polarizado tinyint,
@Flex tinyint,
@Seguridad tinyint,
@BajoMov tinyint,
@AceroInox tinyint,
@Activo tinyint,
@NoResurtir tinyint,
@AltoMov tinyint,
@BifPrg tinyint,
@LabExterno tinyint,
@ComparaGrad tinyint,
@Comentario varchar(1000),
@Sql Varchar(4000),
@Sucursal TinyInt,
@Sql2 NVarchar(1000),
@Cont int
Declare @Db sysname
SET @Sql=''
SELECT
@Codigo=Codigo,@Nivel=Nivel,@Padre=Padre,@Tipo=Tipo,@Descr=Descr,@Linea=Linea,@Porc_Desc=Porc_Desc,
@Precio=Precio,@PrecioFecha=PrecioFecha,@CostoU=CostoU,@CostoForaneo=CostoForaneo,@Precio_Ant=Precio_Ant, @FechaAnterior=FechaAnterior,@Inv_Ini=Inv_ini,@Existencia=Existencia,@Repara=Repara,@Statusx=Statusx, @Dama=Dama,@Caballero=Caballero,@Unisex=Unisex,@Acetato=Acetato,@Metal=Metal,@Titanio=Titanio,@Ppp=Ppp, @Solar=Solar,@Polarizado=Polarizado,@Flex=Flex,@Seguridad=Seguridad,@BajoMov=BajoMov,@AceroInox=AceroInox, @Activo=Activo,@NoResurtir=NoResurtir,@AltoMov=AltoMov,@BifPrg=BifPrg,@Comentario=Comentario,@LabExterno=LabExterno, @ComparaGrad=ComparaGrad,@Afectable=Afectable,@Inventa=Inventa fromarticulo where codigo='000001'DECLARE Cursorx Cursor For Select ServidorEmp,Codigo from sucursales whereisnull(ServidorEmp,'') <>''Open CursorxFetch Next From Cursorx Into @Db,@SucursalWhile @@FETCH_STATUS = 0Begin Set @Cont=0 --Verificamos que no exista ya el articulo en la base de datos en la queestamos posicionados Set @Sql2 = N'Select @Cont=Count(*) From ' + quotename(Rtrim(Ltrim(@Db)))+ N'.dbo.Articulo where Codigo = @Codigo' exec sp_executesql @Sql2, N'@Cont int output, @Codigo char(10)', @Cont output, @Codigo If Isnull(@Cont,0)=0 Begin --Verificiamos si el codigo en las excepciones de precios If Exists(select * from exepcion where codigo=@Codigo andsucursal=@Sucursal) Begin Select @Precio=Precio from exepcion where codigo=@Codigo andsucursal=@Sucursal End --Verificamos si existe el codigo en las excepciones inventariables If Exists(select * from excepinv where codigo=@Codigo andsucursal=@Sucursal) Begin Select @Inventa=Iventariable from excepinv where codigo=@Codigo andsucursal=@Sucursal End --Hacemos la Insercion En la base de Datos Correspondiente Set @Sql ='Insert Into'+rtrim(ltrim(@Db))+'.Dbo.articulo(Codigo,Nivel,Padre,Tipo,Descr,Linea,Porc_Desc,Precio,' Set@Sql=rtrim(Ltrim(@Sql))+'PrecioFecha,CostoU,CostoForaneo,Precio_Ant,FechaAnterior,Inv_ini,Existencia,Repara,Statusx,Dama,Caballero,' Set@Sql=rtrim(Ltrim(@Sql))+'Unisex,Acetato,Metal,Titanio,Ppp,Solar,Polarizado,Flex,Seguridad,BajoMov,AceroInox,Activo,NoResurtir,' Set@Sql=rtrim(Ltrim(@Sql))+'AltoMov,BifPrg,Comentario,LabExterno,ComparaGrad,Afectable,Inventa) Values('''+@Codigo+''','+convert(varchar,@Nivel)+','''+@Padre+''','''+@Tipo+''',''' Set@Sql=rtrim(Ltrim(@Sql))+ltrim(rtrim(Isnull(@Descr,'''')))+''','''+Isnull(@Linea,'''')+''','+convert(varchar,isnull(@Porc_Desc,0))+','+convert(varchar,Isnull(@Precio,0))+','''+convert(varchar,Isnull(@PrecioFecha,0))+''','+convert(varchar,Isnull(@CostoU,0))+','+convert(varchar,Isnull(@CostoForaneo,0))+',' Set@Sql=rtrim(Ltrim(@Sql))+convert(varchar,Isnull(@Precio_Ant,0))+','''+convert(varchar,Isnull(@FechaAnterior,0))+''','+convert(varchar,Isnull(@Inv_Ini,0))+','+convert(varchar,Isnull(@Existencia,0))+','+convert(varchar,Isnull(@Repara,0))+','''+Isnull(@Statusx,'''')+''','+convert(varchar,Isnull(@Dama,0))+',' Set@Sql=rtrim(Ltrim(@Sql))+convert(varchar,Isnull(@Caballero,0))+','+convert(varchar,@Unisex)+','+convert(varchar,@Acetato)+','+convert(varchar,@Metal)+','+convert(varchar,@Titanio)+','+convert(varchar,@Ppp)+','+convert(varchar,@Solar)+','+convert(varchar,@Polarizado)+',' Set@Sql=rtrim(Ltrim(@Sql))+convert(varchar,@Flex)+','+convert(varchar,@Seguridad)+','+convert(varchar,@BajoMov)+','+convert(varchar,@AceroInox)+','+convert(varchar,@Activo)+','+convert(varchar,@NoResurtir)+','+convert(varchar,@AltoMov)+',' Set@Sql=rtrim(Ltrim(@Sql))+convert(varchar,@BifPrg)+','''+Isnull(@Comentario,0)+''','+convert(varchar,@LabExterno)+','+convert(varchar,@ComparaGrad)+','''+Isnull(@Afectable,'')+''','''+Isnull(@inventa,'')+''')' execute(@Sql) end Fetch Next From Cursorx Into @db,@SucursalEndClose CursorxDeallocate CursorxGO
 

Leer las respuestas

#1 Victor M
15/08/2008 - 02:04 | Informe spam
Se me hace que esta un popco complicado leer el codigo asi como se puso pero
la cuestion es esta
digamos que es el campo descripcion y su contenido es Levy's
yo armo el string asi
declare @Sql varchar(1000),@desc char(80)
set @sql='insert into articulo(descripcion) values('''+@desc+''')'
el problema es que agrega una " ' " mas
Saludos

"Victor M" escribió en el mensaje
news:%23xHHOTm$
Buenas tarsde tengo un triguer en una tabla de articulos donde cuando se
inserta un articulo
se dispara e inserta en otras tablas el mismo articulo, el problema es que
voy armando un string y al final lo ejecuto con Execute(@sql) el
problema es que si en la descipcion ponen una " ' " ejemplo
Levy's falla por la comilla pongo el codigo para que lo vean y haber si me
pueden dar una ayudita

DECLARE @Codigo char(10),
@Nivel tinyint,
@padre char(10),
@Tipo char(5),
@Afectable char(1),
@Descr char(80),
@Linea char(3),
@Inventa char(1),
@Porc_Desc decimal(12,2),
@Precio decimal(12,2),
@PrecioFecha datetime,
@CostoU decimal(12,2),
@CostoForaneo decimal(12,2),
@Precio_Ant decimal(12,2),
@FechaAnterior datetime,
@inv_ini int,
@Existencia int,
@Repara tinyint,
@Statusx char(1),
@Dama tinyint,
@Caballero tinyint,
@Unisex tinyint,
@Acetato tinyint,
@Metal tinyint,
@Titanio tinyint,
@Ppp tinyint,
@Solar tinyint,
@Polarizado tinyint,
@Flex tinyint,
@Seguridad tinyint,
@BajoMov tinyint,
@AceroInox tinyint,
@Activo tinyint,
@NoResurtir tinyint,
@AltoMov tinyint,
@BifPrg tinyint,
@LabExterno tinyint,
@ComparaGrad tinyint,
@Comentario varchar(1000),
@Sql Varchar(4000),
@Sucursal TinyInt,
@Sql2 NVarchar(1000),
@Cont int
Declare @Db sysname
SET @Sql=''
SELECT
@Codigo=Codigo,@Nivel=Nivel,@Padre=Padre,@Tipo=Tipo,@Descr=Descr,@Linea=Linea,@Porc_Desc=Porc_Desc,
@Precio=Precio,@PrecioFecha=PrecioFecha,@CostoU=CostoU,@CostoForaneo=CostoForaneo,@Precio_Ant=Precio_Ant,
@FechaAnterior=FechaAnterior,@Inv_Ini=Inv_ini,@Existencia=Existencia,@Repara=Repara,@Statusx=Statusx,
@Dama=Dama,@Caballero=Caballero,@Unisex=Unisex,@Acetato=Acetato,@Metal=Metal,@Titanio=Titanio,@Ppp=Ppp,
@Solar=Solar,@Polarizado=Polarizado,@Flex=Flex,@Seguridad=Seguridad,@BajoMov=BajoMov,@AceroInox=AceroInox,
@Activo=Activo,@NoResurtir=NoResurtir,@AltoMov=AltoMov,@BifPrg=BifPrg,@Comentario=Comentario,@LabExterno=LabExterno,
@ComparaGrad=ComparaGrad,@Afectable=Afectable,@Inventa=Inventa
fromarticulo where codigo='000001'DECLARE Cursorx Cursor For Select
ServidorEmp,Codigo from sucursales whereisnull(ServidorEmp,'') <>''Open
CursorxFetch Next From Cursorx Into @Db,@SucursalWhile @@FETCH_STATUS =
0Begin Set @Cont=0 --Verificamos que no exista ya el articulo en la
base de datos en la queestamos posicionados Set @Sql2 = N'Select
@Cont=Count(*) From ' + quotename(Rtrim(Ltrim(@Db)))+ N'.dbo.Articulo
where Codigo = @Codigo' exec sp_executesql @Sql2, N'@Cont int output,
@Codigo char(10)', @Cont output, @Codigo If Isnull(@Cont,0)=0
egin --Verificiamos si el codigo en las excepciones de precios If
Exists(select * from exepcion where codigo=@Codigo andsucursal=@Sucursal)
Begin Select @Precio=Precio from exepcion where codigo=@Codigo
andsucursal=@Sucursal End --Verificamos si existe el codigo en las
excepciones inventariables If Exists(select * from excepinv where
codigo=@Codigo andsucursal=@Sucursal) Begin Select
@Inventa=Iventariable from excepinv where codigo=@Codigo
andsucursal=@Sucursal End --Hacemos la Insercion En la base de Datos
Correspondiente Set @Sql ='Insert
Into'+rtrim(ltrim(@Db))+'.Dbo.articulo(Codigo,Nivel,Padre,Tipo,Descr,Linea,Porc_Desc,Precio,'
=rtrim(Ltrim(@Sql))+'PrecioFecha,CostoU,CostoForaneo,Precio_Ant,FechaAnterior,Inv_ini,Existencia,Repara,Statusx,Dama,Caballero,'
=rtrim(Ltrim(@Sql))+'Unisex,Acetato,Metal,Titanio,Ppp,Solar,Polarizado,Flex,Seguridad,BajoMov,AceroInox,Activo,NoResurtir,'
=rtrim(Ltrim(@Sql))+'AltoMov,BifPrg,Comentario,LabExterno,ComparaGrad,Afectable,Inventa)
Values('''+@Codigo+''','+convert(varchar,@Nivel)+','''+@Padre+''','''+@Tipo+''','''
=rtrim(Ltrim(@Sql))+ltrim(rtrim(Isnull(@Descr,'''')))+''','''+Isnull(@Linea,'''')+''','+convert(varchar,isnull(@Porc_Desc,0))+','+convert(varchar,Isnull(@Precio,0))+','''+convert(varchar,Isnull(@PrecioFecha,0))+''','+convert(varchar,Isnull(@CostoU,0))+','+convert(varchar,Isnull(@CostoForaneo,0))+','
=rtrim(Ltrim(@Sql))+convert(varchar,Isnull(@Precio_Ant,0))+','''+convert(varchar,Isnull(@FechaAnterior,0))+''','+convert(varchar,Isnull(@Inv_Ini,0))+','+convert(varchar,Isnull(@Existencia,0))+','+convert(varchar,Isnull(@Repara,0))+','''+Isnull(@Statusx,'''')+''','+convert(varchar,Isnull(@Dama,0))+','
=rtrim(Ltrim(@Sql))+convert(varchar,Isnull(@Caballero,0))+','+convert(varchar,@Unisex)+','+convert(varchar,@Acetato)+','+convert(varchar,@Metal)+','+convert(varchar,@Titanio)+','+convert(varchar,@Ppp)+','+convert(varchar,@Solar)+','+convert(varchar,@Polarizado)+','
=rtrim(Ltrim(@Sql))+convert(varchar,@Flex)+','+convert(varchar,@Seguridad)+','+convert(varchar,@BajoMov)+','+convert(varchar,@AceroInox)+','+convert(varchar,@Activo)+','+convert(varchar,@NoResurtir)+','+convert(varchar,@AltoMov)+','
=rtrim(Ltrim(@Sql))+convert(varchar,@BifPrg)+','''+Isnull(@Comentario,0)+''','+convert(varchar,@LabExterno)+','+convert(varchar,@ComparaGrad)+','''+Isnull(@Afectable,'')+''','''+Isnull(@inventa,'')+''')'
execute(@Sql) end Fetch Next From Cursorx Into @db,@SucursalEndClose
CursorxDeallocate CursorxGO

Preguntas similares