CONSULTA SOBRE REGLA

07/03/2005 - 18:40 por jaime | Informe spam
hola, he generado una regla, en la que indico lo siguiente:
len(ltrim(@Des))>0
para una gran cantidad de campos en disitntas tablas, esta se llama
validacampos
como puedo hacer para modificar la regla a
len(ltrim(@Des))>=0
pero cuando le doy aplicar, me dice que esta enlazado a varios campos, como
la puedo modificar sin eliminar todas
las tablas de la base de datos, ya que estas estan funcionando en un
aplicativo actualmente
 

Leer las respuestas

#1 Alejandro Mesa
07/03/2005 - 19:37 | Informe spam
Jaime,

No se puede borrar la regla mientras ella este atada a una columna. El
proceso seria desatarla de todas las columnas usando el procedimiento
sp_unbindrule, borrarla, crearla nuevamente y despues volverla a atar usando
el procedimiento sp_bindrule


Ejemplo:

use northwind
go

create rule mayor_igual_a_cadena_vacia as @value > ''
go

create table t1 (colA varchar(25) null)
go

create table t2 (colA varchar(25) null)
go

exec sp_bindrule mayor_igual_a_cadena_vacia, '[t1].colA'
exec sp_bindrule mayor_igual_a_cadena_vacia, '[t2].colA'
print ''
go

declare @sql nvarchar(4000)
declare @tn sysname
declare @cn sysname
declare @rn sysname

set @rn = N'mayor_igual_a_cadena_vacia'

declare my_cursor cursor local static scroll read_only
for
select
object_name(c.[id]) as table_name,
c.[name] as column_name
from
syscolumns c, syscomments m
where
m.[id] = c.domain
and objectproperty(c.domain, 'IsRule') = 1
and object_name(c.domain) = @rn
order by
c.[id]

open my_cursor

while 1 = 1
begin
fetch next from my_cursor into @tn, @cn

if @@error != 0 or @@fetch_status != 0 break

set @sql = N'sp_unbindrule ''' + quotename(@tn) + '.' + quotename(@cn) + ''''
print @sql
execute sp_executesql @sql
end

print ''

drop rule mayor_igual_a_cadena_vacia

exec ('create rule mayor_igual_a_cadena_vacia as @value >= ''''')

fetch first from my_cursor into @tn, @cn

while @@fetch_status = 0
begin
set @sql = N'sp_bindrule mayor_igual_a_cadena_vacia, ''' + quotename(@tn) +
'.' + quotename(@cn) + ''''
print @sql
execute sp_executesql @sql

fetch next from my_cursor into @tn, @cn
end

close my_cursor
deallocate my_cursor
go

exec sp_helpconstraint t1
exec sp_helpconstraint t2
drop table t1, t2
go

drop rule mayor_igual_a_cadena_vacia
go


AMB

"jaime" wrote:

hola, he generado una regla, en la que indico lo siguiente:
len(ltrim(@Des))>0
para una gran cantidad de campos en disitntas tablas, esta se llama
validacampos
como puedo hacer para modificar la regla a
len(ltrim(@Des))>=0
pero cuando le doy aplicar, me dice que esta enlazado a varios campos, como
la puedo modificar sin eliminar todas
las tablas de la base de datos, ya que estas estan funcionando en un
aplicativo actualmente



Preguntas similares