2009-08-24 25 views
124

Estoy tratando de cambiar el tamaño de una columna en el servidor SQL usando:Cambiar el tamaño de una columna que hace referencia una vista enlazada a esquema en SQL Server

ALTER TABLE [dbo].[Address] 
ALTER COLUMN [Addr1] [nvarchar](80) NULL 

donde la longitud de Addr1 fue originalmente 40 .

Fracasó, elevando este error:

The object 'Address_e' is dependent on column 'Addr1'. 
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column. 

He tratado de leer sobre él y parece que debido a que algunos puntos de vista hacen referencia a esta columna y parece que SQL Server está en realidad tratando de dejar caer el columna que levantó el error.

Address_e es una vista creada por el administrador de base de datos anterior.

¿Hay alguna otra manera en que pueda cambiar el tamaño de la columna?

+1

¿Qué es "Address_e"? – devio

+2

Address_e es una vista creada por el administrador de base de datos anterior. Y al igual que lo que Remus mencionó, tiene definido SCHEMABINDING. – Staelen

Respuesta

57

Las vistas se crean probablemente utilizando la opción WITH SCHEMABINDING y esto significa que están cableadas explícitamente para evitar dichos cambios. Parece que el encuadernado de esquemas funcionó y te impidió romper esos puntos de vista, día de suerte, ¿eh? Póngase en contacto con el administrador de su base de datos y pídale que haga el cambio, después de que afirme el impacto en la base de datos.

De MSDN:

SCHEMABINDING

Binds the view to the schema of the underlying table or tables. When SCHEMABINDING is specified, the base table or tables cannot be modified in a way that would affect the view definition. The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified.

+1

Siempre uso schemabinding ... – gbn

+1

gracias Remus, la vista tiene definido SCHEMABINDING. ¿Hay alguna manera fácil de eludir la restricción o realmente necesito eliminar las vistas para que funcione? – Staelen

+1

No puede eludirlo, ese es su propósito. Alguien fue más largo para agregar schemabindig para evitar cambios en la tabla. Esto no es un accidente, parece que la persona sabe lo que estaba haciendo. ¿Estás * seguro * de que quieres cambiar la tabla? –

258
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150) 
+3

Código perfecto ... Lo compruebo ..... –

+11

nah, el problema era como lo que Remus mencionó. no hay nada de malo en el código en sí – Staelen

+11

@NilRad Ummm, ¿quizás estás pensando en PL-SQL? ALTER COLUMN es la sintaxis correcta en SQL 2008 R2 – schmidlop

2

aquí es lo que funciona con la versión del programa que estoy usando: puede funcionar para usted también.

Voy a colocar las instrucciones y el comando que lo hace. clase es el nombre de la tabla. lo cambias en la tabla con este método. no solo el retorno en el proceso de búsqueda.


ver la clase tabla

select * from class 

cambiar la longitud de las columnas FacID (visto como "FACI") y ClassNumber (visto como "classnu") para adaptarse a toda las etiquetas.nuevo

alter table class modify facid varchar (5); 

alter table class modify classnumber varchar(11); 

mesa fin de ver la diferencia

select * from class; 

(ejecute el comando de nuevo para ver la diferencia)


Esto cambia el la tabla real para el bien, pero para mejor.

P.S. Hice estas instrucciones como una nota para los comandos. Esto no es una prueba, pero puede ayudar en uno :)

6

Si alguien quiere "Aumentar el ancho de columna de la tabla replicada" en SQL Server 2008, entonces no es necesario cambiar la propiedad de "replicate_ddl=1". Sólo tiene que seguir los pasos siguientes -

  1. Abiertas SSMS
  2. Conectar a la base de datos Editorial
  3. orden de marcha - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. además de aumentar el ancho de columna de varchar(x) a varchar(22) y el mismo cambio que se puede ver en suscriptor (la transacción se replicó). Por lo tanto, no es necesario volver a inicializar la réplica

Espero que esto ayude a todos los que lo estén buscando.

0

Compruebe la intercalación de columnas. Esta secuencia de comandos puede cambiar la intercalación a la tabla predeterminada. Agregue la intercalación actual al script.

Cuestiones relacionadas