una quitar primary primaria modificar llave insertar hacer foranea definir crear como columna clave auto_increment sql sql-server database shared-hosting

quitar - modificar columna auto_increment sql server



Cambiar columna de clave principal en SQL Server (2)

ACTUALIZAR

Estas son las restricciones como resultado de la consulta

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = ''history'' CONSTRAINT_NAME COLUMN_NAME ORDINAL_POSITION PK_history userKey 1 PK_history name 2

Aquí está el resultado de la consulta

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = ''history'' CONSTRAINT_NAME CONSTRAINT_TYPE IS_DEFERRABLE INITIALLY_DEFERRED PK_history PRIMARY KEY NO NO

FINALIZAR ACTUALIZACIÓN

Mi host proporciona una interfaz para mi SQL Server DB a través de ASP.NET Enterprise Manager.

Tengo 3 columnas en mi tabla de history :

  • userId (clave, int, NULL no permitido)
  • name (clave, cadena, NULL no permitido)
  • id (no key, int, NULL permitido)

Quiero hacer que la columna de identificación sea la única clave.

Para hacer eso, creo que necesito:

  1. Asegúrese de que no haya valores NULL en esa columna para ninguna fila
  2. Establezca la columna para no permitir valores NULL
  3. Agregue la columna como clave principal
  4. Retire las otras 2 columnas como claves

Sin embargo, cuando uso la UI proporcionada, nunca funciona. A veces parecerá que intenta hacer algo, pero nunca cambia cuando actualizo la vista de las columnas. Ocasionalmente crea una tabla temporal que parece que intentó hacer parte de la operación, pero nunca se copia / sobrescribe la tabla original que intento cambiar.

Cuando intento usar una consulta, los cambios tampoco aparecen. Aquí están las consultas que creo que necesito:

SELECT * from history WHERE id is NULL <---- This shows 0 results ALTER TABLE history ALTER COLUMN id int NOT NULL ALTER TABLE history ADD PRIMARY KEY (id) ALTER TABLE history DROP CONSTRAINT userId DROP CONSTRAINT name GO

Solo he llegado al intento de rechazar NULLs y agregar la clave primaria para la columna id. No parece funcionar. ¿Alguien me puede apuntar en la dirección correcta? ¡Gracias!


Suponiendo que su restricción de clave primaria actual se llame pk_history, puede reemplazar las siguientes líneas:

ALTER TABLE history ADD PRIMARY KEY (id) ALTER TABLE history DROP CONSTRAINT userId DROP CONSTRAINT name

con estos:

ALTER TABLE history DROP CONSTRAINT pk_history ALTER TABLE history ADD CONSTRAINT pk_history PRIMARY KEY (id)

Si no sabe cuál es el nombre del PK, puede encontrarlo con la siguiente consulta:

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = ''history''


Nigromancia
Parece que tienes un esquema tan bueno para trabajar como yo ... Aquí está cómo hacerlo correctamente:

En este ejemplo, el nombre de la tabla es dbo.T_SYS_Language_Forms, y el nombre de la columna es LANG_UID

-- First, chech if the table exists... IF 0 < ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_SCHEMA = ''dbo'' AND TABLE_NAME = ''T_SYS_Language_Forms'' ) BEGIN -- Check for NULL values in the primary-key column IF 0 = (SELECT COUNT(*) FROM T_SYS_Language_Forms WHERE LANG_UID IS NULL) BEGIN ALTER TABLE T_SYS_Language_Forms ALTER COLUMN LANG_UID uniqueidentifier NOT NULL -- No, don''t drop, FK references might already exist... -- Drop PK if exists -- ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT pk_constraint_name --DECLARE @pkDropCommand nvarchar(1000) --SET @pkDropCommand = N''ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT '' + QUOTENAME((SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS --WHERE CONSTRAINT_TYPE = ''PRIMARY KEY'' --AND TABLE_SCHEMA = ''dbo'' --AND TABLE_NAME = ''T_SYS_Language_Forms'' ----AND CONSTRAINT_NAME = ''PK_T_SYS_Language_Forms'' --)) ---- PRINT @pkDropCommand --EXECUTE(@pkDropCommand) -- Instead do -- EXEC sp_rename ''dbo.T_SYS_Language_Forms.PK_T_SYS_Language_Forms1234565'', ''PK_T_SYS_Language_Forms''; -- Check if they keys are unique (it is very possible they might not be) IF 1 >= (SELECT TOP 1 COUNT(*) AS cnt FROM T_SYS_Language_Forms GROUP BY LANG_UID ORDER BY cnt DESC) BEGIN -- If no Primary key for this table IF 0 = ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = ''PRIMARY KEY'' AND TABLE_SCHEMA = ''dbo'' AND TABLE_NAME = ''T_SYS_Language_Forms'' -- AND CONSTRAINT_NAME = ''PK_T_SYS_Language_Forms'' ) ALTER TABLE T_SYS_Language_Forms ADD CONSTRAINT PK_T_SYS_Language_Forms PRIMARY KEY CLUSTERED (LANG_UID ASC) ; -- Adding foreign key IF 0 = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME = ''FK_T_ZO_SYS_Language_Forms_T_SYS_Language_Forms'') ALTER TABLE T_ZO_SYS_Language_Forms WITH NOCHECK ADD CONSTRAINT FK_T_ZO_SYS_Language_Forms_T_SYS_Language_Forms FOREIGN KEY(ZOLANG_LANG_UID) REFERENCES T_SYS_Language_Forms(LANG_UID); END -- End uniqueness check ELSE PRINT ''FSCK, this column has duplicate keys, and can thus not be changed to primary key...'' END -- End NULL check ELSE PRINT ''FSCK, need to figure out how to update NULL value(s)...'' END