sql - powerapps - Agregar clave principal a la tabla existente
powerapps ejemplos (9)
Creo que algo como esto debería funcionar
-- drop current primary key constraint
ALTER TABLE dbo.persion
DROP CONSTRAINT PK_persionId;
GO
-- add new auto incremented field
ALTER TABLE dbo.persion
ADD pmid BIGINT IDENTITY;
GO
-- create new primary key constraint
ALTER TABLE dbo.persion
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);
GO
Tengo una tabla existente llamada Persion
. En esta tabla tengo 5 columnas:
- persionId
- Pname
- PMid
- Pdescription
- Pamt
Cuando creé esta tabla, configuré PersionId
y Pname
como la clave principal .
Ahora quiero incluir una columna más en la clave principal - PMID. ¿Cómo puedo escribir una declaración ALTER
para hacer esto? (Ya tengo 1000 registros en la tabla)
Intenta usar este código:
ALTER TABLE `table name`
CHANGE COLUMN `column name` `column name` datatype NOT NULL,
ADD PRIMARY KEY (`column name`) ;
La restricción PRIMARY KEY identifica de forma única cada registro en una tabla de base de datos. Las claves primarias deben contener valores UNIQUE y la columna no puede contener valores NULL.
-- DROP current primary key
ALTER TABLE tblPersons DROP CONSTRAINT <constraint_name>
Example:
ALTER TABLE tblPersons
DROP CONSTRAINT P_Id;
-- ALTER TABLE tblpersion
ALTER TABLE tblpersion add primary key (P_Id,LastName)
Nigromancia
Solo en caso de que alguien tenga un esquema tan bueno para trabajar como yo ...
Aquí es 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 (it is very possible it does not have the name you think it has...)
-- 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)
;
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
Por favor, intente esto-
ALTER TABLE TABLE_NAME DROP INDEX `PRIMARY`, ADD PRIMARY KEY (COLUMN1, COLUMN2,..);
Si agrega restricción de clave principal
ALTER TABLE <TABLE NAME> ADD CONSTRAINT <CONSTRAINT NAME> PRIMARY KEY <COLUMNNAME>
por ejemplo:
ALTER TABLE DEPT ADD CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
eliminar la restricción y recrearla
alter table Persion drop CONSTRAINT <constraint_name>
alter table Persion add primary key (persionId,Pname,PMID)
editar:
puedes encontrar el nombre de la restricción usando la consulta a continuación:
select OBJECT_NAME(OBJECT_ID) AS NameofConstraint
FROM sys.objects
where OBJECT_NAME(parent_object_id)=''Persion''
and type_desc LIKE ''%CONSTRAINT''
-- create new primary key constraint
ALTER TABLE dbo.persion
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);
es una mejor solución porque tienes control sobre el nombre de la clave primaria.
Es mejor que solo usar
ALTER TABLE Persion ADD PRIMARY KEY(persionId,Pname,PMID)
que genera nombres aleatorios y puede causar problemas al crear scripts o al comparar bases de datos
ALTER TABLE TABLE_NAME ADD PRIMARY KEY(`persionId`,`Pname`,`PMID`)