Pregunta

Estoy probando las nuevas funciones de base de datos de proyectos de Visual Studio 2010 y quiere cambiar el nombre de una columna en una tabla. He cambiado el nombre en el script de creación y desplegado contra la base de datos. La secuencia de comandos que se generó acaba de caer la columna y se añade una nueva columna con el nombre correcto, pero se perdió todos los datos.

¿Hay un ajuste que no va a soltar los datos de la columna?

Busco la solución "DataDude" a este problema. (Si la hay)

PRINT N'Altering [dbo].[Users]...';

GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];

GO
ALTER TABLE [dbo].[Users]
    ADD [Testn] NVARCHAR (50) NULL;

GO

Gracias, Keith

¿Fue útil?

Solución

El uso del esquema Ver haciendo clic en Ver -> Base de datos de esquema Ver

Para ver las tablas y sus columnas.

Haga clic derecho en la columna y haga clic en Refactor -> Cambiar nombre ...

Cambiar el nombre en el campo Nuevo nombre con ver los cambios al cuadro marcado.

Aviso cambia no sólo el nombre de la columna, sino también los procedimientos almacenados que se pueden hacer referencia a esa columna.

Dentro de la base de datos de un archivo de proyecto refactorlog se crea que muestra el cambio de nombre.

Cuando el nuevo esquema se implementa en contra de la base de datos existente, parece que se ve en el archivo DataDude refactorlog y la mesa dbo._Refactorlog para determinar qué necesitan ser procesados ??en contra de la base de datos de refactors.

Este es el código que genera utilizando este procedimiento, el cambio de un nombre de columna que también se hace referencia en un procedimiento almacenado:

EXECUTE sp_rename @objname = N'[dbo].[Users].[TestF]', @newname = N'TestG', @objtype = N'COLUMN';

GO
PRINT N'Altering [dbo].[ListUsers]...';

GO
ALTER PROCEDURE [dbo].[ListUsers]

AS
    SELECT [ID], [FirstName], [LastName], [TestG]
    FROM Users
RETURN 0
GO

Keith

Otros consejos

Si la tabla es pequeña, se puede crear una nueva tabla con las columnas correctas, y luego insertar de la tabla antigua a la nueva, cambiar las columnas a medida que avanza.

Si la tabla es grande, y usted no puede permitirse ni el tiempo, la memoria RAM, o el esfuerzo para copiar toda la tabla, se puede alter table add new_column entonces update table set new_column=old_column entonces alter table drop column old_column.

La sintaxis es, por supuesto, simplifica.

La forma en que los proyectos de bases de datos de Visual Studio manejar cambios de esquema se presta a este tipo de confusión. Es muy difícil para VS de saber si usted simplemente cambiado el nombre de una columna (y debe preservar los datos) o se retira de la columna y se añade una diferente. Mi compañía trabajó durante un tiempo en un producto de control de fuente de esquema de la base de que tenía todos estos mismos problemas.

Al final, he llegado a creer que la mejor forma de cambios en el esquema de la manija es el propuesto por K. Scott Allen (referenciado por Jeff Atwood) . Esta serie de artículos se debe establecer en un curso hacia una solución de control de versiones de bases de datos mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top