Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

okil

ALTER TABLE como índice

Recommended Posts

Olá a todos.

 

Estou tentando fazer um ALTER TABLE em uma tabela no SQL SERVER, porem esta retornando a seguinte mensagem.

 

índice ' Nome_indice ' depende de coluna ' Nome_Coluna '.

Msg 4922, Level 16, State 9, Line 1

Falha em ALTER TABLE ALTER COLUMN Nome_Coluna porque um ou mais objetos acessam esta coluna.

 

Sabem me falar se tem como eu realizar, esta alteração mesmo como o “Indice” habilitado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o ALTER está mudando o tamanho ou tipo de uma coluna ?

Esta coluna é PK da tabela ou FK de outra tabela ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando colocar NOT NULL no campo e ele não é PK nem FK.

 

Comando:

ALTER TABLE Nome_Tabela ALTER COLUMN Nome_coluna varchar(8) NOT NULL

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que retorna a sql

 

select count(*)
from Nome_Tabela 
where nome_coluna is null

 

Ou seja, existem valores nulos nesta coluna ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todos os campos desta coluna estão preenchidos, não a nem um campo null, acredito que o problema

seja no índice não sei de devo desabilitar ou a pagar, este índice para que possa fazer esta alteração na tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualquer alteração em colunas que são indices ou fazem partes de indices, tem que ser dropado o indice e reconstruido.

Isso se dá devido a fragmentacao do indice, fks, e outros fatores.

 

Pode-se pegar as dependencias direta dos objetos?


declare @objeto varchar(max), @id int

set @objeto = TABELA'

select @id = id from sysobjects obj where name  = @objeto

select 
  'name' = (s6.name+ '.' + o1.name),  
   type = substring(v2.name, 5, 66), 
   'column' = col_name(d3.depid, d3.depnumber)  
from  sys.objects  o1  
,master.dbo.spt_values v2  
,sysdepends  d3  
   ,master.dbo.spt_values u4  
   ,master.dbo.spt_values w5 
   ,sys.schemas  s6  
where  o1.object_id = d3.depid  
 and  o1.type = substring(v2.name,1,2) collate database_default and v2.type = 'O9T'  
 and  u4.type = 'B' and u4.number = d3.resultobj  
 and  w5.type = 'B' and w5.number = d3.readobj|d3.selall  
 and  d3.id = @id  
 and  o1.schema_id = s6.schema_id  
 and deptype < 2 

set @objeto = 'dbo.'+@objeto

SELECT 
isnull(referenced_database_name,'-') [database],
isnull(referenced_schema_name,'-') AS  [schema],
   referenced_entity_name AS table_name,
   referenced_minor_name AS referenced_column
   -- COALESCE(COL_NAME(OBJECT_ID(@objeto),referencing_minor_id), 'N/A') AS referencing_column_name ,

FROM sys.dm_sql_referenced_entities (@objeto, 'OBJECT') dm

 

Vao te retornar duas consultas. A última serve para SQL2005 adiante.

A sys.dm_sql_referenced_entities é uma referencia de sistema, e retorna mto mais dados. coloquei somente os que eu utilizo em meu ambiente.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.