Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ?
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
O que retorna a sql
select count(*)
from Nome_Tabela
where nome_coluna is null
Ou seja, existem valores nulos nesta coluna ?
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.
Se não tens um programa gerenciador tente ler as tabelas de metadados, pode ser um caminho.
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
O que o ALTER está mudando o tamanho ou tipo de uma coluna ?
Esta coluna é PK da tabela ou FK de outra tabela ?