tutorial transact query examples ejemplos sql sql-server tsql

query - transact sql if



sql 2005 force table rename que tiene dependencias (5)

Busque las "dependencias forzadas", luego elimínelas o deshabilítelas.

Por "dependencias forzadas", significa vinculación de esquema, por lo que tendrá que buscar específicamente eso.

Aquí hay una consulta para buscar referencias de enlace de esquema a su objeto:

select o.name as ObjName, r.name as ReferencedObj from sys.sql_dependencies d join sys.objects o on o.object_id=d.object_id join sys.objects r on r.object_id=d.referenced_major_id where d.class=1 AND r.name = @YourObjectName

Como señalé en los comentarios, no hay forma de anular de forma FORCEABLE el enlace de esquema. Cuando usa el enlace de esquema, está diciendo explícitamente "No permita que nadie ni yo invaliden esto". La única forma de evitar el enlace de esquema es deshacerlo, y eso es intencional.

¿Cómo se fuerza un cambio de nombre?

No se pudo cambiar el nombre para la tabla ''dbo.x. (Microsoft.SqlServer.Smo)

Para obtener ayuda, haga clic en: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.2531.0+((Katmai_PCU_Main).090329-1045+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Rename+Table&LinkId=20476

Se produjo una excepción al ejecutar una instrucción o lote Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

El objeto ''[dbo]. [X]'' no puede ser renombrado porque el objeto participa en dependencias forzadas. (Microsoft SQL Server, Error: 15336)

Para obtener ayuda, haga clic en: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=15336&LinkId=20476


En el Examinador de objetos de SQL Server, haga clic con el botón derecho en la tabla con el problema y seleccione View Dependencies . A continuación, en la vista de la lista, haga clic con el botón derecho (ver) y seleccione SCRIPT para CREAR VISTA en la nueva ventana del Editor de consultas SQL, luego elimine WITH SCHEMABINDING del script t-sql CREATE VIEW y ejecute el t-sql CREATE VIEW revisado. Esto desvincula la dependencia del esquema de la tabla. Pude recrear la tabla en este punto (DROP, RENAME, etc.).

Nota:

El enlace de esquema puede ocurrir en funciones y otros objetos en su db. El uso de View Dependencies de View Dependencies en el objeto que produce el error es esencial para solucionar el problema.

Por cierto:

Originalmente agregué enlace de esquema para habilitar la indexación de vista. Mantener un buen índice en la (s) tabla (s) subyacente (s) puede mitigar el impacto de rendimiento de no tener uno en la vista.

  1. Ver Dependencias
  2. Más sobre el enlace de esquema

Prueba esto:

/* Example 1: Rename a table dbo.MyTable -> dbo.YourTable EXEC dbo.USP_DROP_ENFORCED_DEPENDENCIES @SchemaName=N''dbo'', @EntityName=N''MyTable'', @Debug=1; EXEC sp_rename N''dbo.MyTable'', N''YourTable'', N''OBJECT'' Example 2: Rename a column dbo.MyTable.MyColumn -> dbo.MyTable.YourColumn EXEC dbo.USP_DROP_ENFORCED_DEPENDENCIES @SchemaName=N''dbo'', @EntityName=N''MyTable'', @ColumnName=N''MyColumn'' @Debug=1; EXEC sp_rename N''dbo.MyTable.MyColumn'', N''YourColumn'', N''COLUMN'' */ CREATE Procedure dbo.USP_DROP_ENFORCED_DEPENDENCIES ( @SchemaName sysname = ''dbo'', @EntityName sysname, @ColumnName sysname = NULL, @Debug bit = 0 ) AS BEGIN SET NOCOUNT ON; SET ROWCOUNT 0; DECLARE @ReferencingEntitySchema sysname, @ReferencingEntityName sysname, @ReferencingEntityType nvarchar(8), @SqlScript nvarchar(512); DECLARE ReferencingEntitiesCursor CURSOR LOCAL FORWARD_ONLY FOR SELECT OBJECT_SCHEMA_NAME(dep.referencing_id) AS [schema] ,referencing_entity.name ,CASE referencing_entity.type WHEN ''V'' THEN N''VIEW'' ELSE /*IF, FN, TF*/ N''FUNCTION'' END as [type] FROM sys.sql_expression_dependencies AS dep INNER JOIN sys.objects AS referencing_entity ON dep.referencing_id = referencing_entity.object_id WHERE dep.referenced_entity_name = @EntityName AND dep.referenced_schema_name = @SchemaName AND is_schema_bound_reference = 1 AND ((@ColumnName IS NULL AND dep.referenced_minor_id = 0) OR COL_NAME(dep.referenced_id, dep.referenced_minor_id) = @ColumnName) OPEN ReferencingEntitiesCursor FETCH NEXT FROM ReferencingEntitiesCursor INTO @ReferencingEntitySchema, @ReferencingEntityName, @ReferencingEntityType; WHILE @@FETCH_STATUS = 0 BEGIN EXEC dbo.USP_DROP_ENFORCED_DEPENDENCIES @SchemaName=@ReferencingEntitySchema, @EntityName=@ReferencingEntityName, @Debug=@Debug; --The goal is to produce the following script: /* DROP FUNCTION dbo.UFN_SOME_FUNCTION; OR DROP VIEW dbo.UFN_SOME_VIEW; */ SET @SqlScript = N''DROP '' + @ReferencingEntityType + N'' '' + @ReferencingEntitySchema + ''.'' + @ReferencingEntityName; IF(@Debug = 1) RAISERROR (@SqlScript, 0/*severity*/, 0/*state*/) WITH NOWAIT; EXEC (@SqlScript); FETCH NEXT FROM ReferencingEntitiesCursor INTO @ReferencingEntitySchema, @ReferencingEntityName, @ReferencingEntityType; END CLOSE ReferencingEntitiesCursor; DEALLOCATE ReferencingEntitiesCursor; END GO


Tuve el mismo problema, mi problema fue que tengo un CAMPO COMPUTADO utilizando la columna que estaba tratando de cambiar de nombre.

Al ejecutar la consulta de la respuesta seleccionada, pude decir que tenía dependencias forzadas, pero no pude ver exactamente cuál era el problema.


Tuve un problema como este. Solté restricciones en este objeto de base de datos, cambié el nombre del objeto de base de datos y luego volví a crear estas restricciones. Esto solucionó mi problema.