Tengo este sql:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
pero aparentemente, en algunas otras bases de datos que utilizamos, la restricción tiene un nombre diferente. ¿Cómo puedo verificar si hay una restricción con el nombre FK_ChannelPlayerSkins_Channels
?
sql-server
information-schema
system-tables
Lieven Cardoen
fuente
fuente
Respuestas:
prueba esto:
- EDITAR -
Cuando originalmente respondí esta pregunta, estaba pensando en "Clave externa" porque la pregunta original se refería a la búsqueda de "FK_ChannelPlayerSkins_Channels". Desde entonces, muchas personas han comentado sobre la búsqueda de otras "restricciones" aquí hay algunas otras consultas para eso:
aquí hay un método alternativo
Si necesita aún más información de restricción, mire dentro del procedimiento almacenado del sistema
master.sys.sp_helpconstraint
para ver cómo obtener cierta información. Para ver el código fuente con SQL Server Management Studio, ingrese al "Explorador de objetos". Desde allí, expande la base de datos "Maestra", luego expande "Programabilidad", luego "Procedimientos almacenados", luego "Procedimientos almacenados del sistema". Luego puede encontrar "sys.sp_helpconstraint" y hacer clic derecho y seleccionar "modificar". Solo tenga cuidado de no guardar ningún cambio. Además, puede usar este procedimiento almacenado del sistema en cualquier tabla al usarlo comoEXEC sp_helpconstraint YourTableNameHere
.fuente
La forma más fácil de verificar la existencia de una restricción (y luego hacer algo como soltarla si existe) es usar la función OBJECT_ID () ...
OBJECT_ID puede usarse sin el segundo parámetro ('C' solo para restricciones de verificación) y eso también puede funcionar, pero si el nombre de su restricción coincide con el nombre de otros objetos en la base de datos, puede obtener resultados inesperados.
OBJECT_ID también se puede usar con otras "restricciones" como restricciones de clave externa o restricciones de clave primaria, etc. Para obtener mejores resultados, siempre incluya el tipo de objeto apropiado como el segundo parámetro para la función OBJECT_ID:
Tipos de objetos de restricción:
También tenga en cuenta que el esquema a menudo se requiere. El esquema de restricciones generalmente toma el esquema de la tabla primaria.
Si no coloca sus restricciones (o lo que esté comprobando) entre paréntesis cuando use este método, también puede causar un falso negativo: si su objeto usa caracteres inusuales (como a.), Los paréntesis son obligatorios.
fuente
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
debe ser compatible desde la versión actual hasta sql2000. No sedbo
requiere esquema tampoco.Si está buscando otro tipo de restricción, por ejemplo, valores predeterminados, debe usar una consulta diferente ( ¿Cómo encuentro una restricción predeterminada usando INFORMATION_SCHEMA? Respondida por devio ). Utilizar:
para encontrar una restricción predeterminada por nombre.
He reunido diferentes comprobaciones de "SI no existe" en mi publicación " DDL 'SI no existe" condiciones para hacer que los scripts SQL sean ejecutables "
fuente
fuente
¿Está buscando algo como esto? A continuación se prueba en SQL Server 2005
fuente
Solo algo a tener en cuenta ......
En SQL Server 2008 R2 SSMS, el comando "Restricción de script como -> DROP And CREATE To" produce T-SQL como a continuación
Fuera de la caja, este script NO elimina la restricción porque SELECT devuelve 0 filas. (ver publicación de Microsoft Connect ).
El nombre de la restricción predeterminada es incorrecto, pero deduzco que también tiene algo que ver con la función OBJECT_ID porque cambiar el nombre no soluciona el problema.
Para solucionar esto, eliminé el uso de OBJECT_ID y usé el nombre de restricción predeterminado en su lugar.
fuente
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
en caso de que tenga 2 restricciones del mismo nombre en diferentes esquemas.Utilizo la siguiente consulta para verificar una restricción existente antes de crearla.
Esto consulta la restricción por nombre dirigido a un nombre de tabla dado. Espero que esto ayude.
fuente
fuente
fuente
INFORMATION_SCHEMA
es tu amigo. Tiene todo tipo de vistas que muestran todo tipo de información de esquema. Verifique las vistas de su sistema. Descubrirá que tiene tres vistas relacionadas con restricciones, una de ellasCHECK_CONSTRAINTS
.fuente
Lo uso para verificar restricciones remotas en una columna. Debe tener todo lo que necesitas.
fuente
fuente
Puede usar el de arriba con una advertencia:
Es necesario usar el
name = [Constraint name]
dado que una tabla puede tener varias claves foráneas y aún no tener la clave foránea siendo verificadafuente