tablas tabla significa restaurar requieren recreación realizado que puedo permite modificar migrar los impedir guardar datos compatibilidad cambios cambiar sql-server sql-server-2008 database-project

sql server - tabla - Error ''Opciones SET incorrectas'' al crear proyecto de base de datos



que significa compatibilidad de base de datos (4)

Estamos utilizando Visual Studio y un proyecto de base de datos para generar nuestra base de datos.

Acabo de realizar una serie de cambios en la base de datos (incluida la adición de una nueva tabla llamada Correspondence ) importé esos cambios en el proyecto de la base de datos, e intenté implementar (reconstruir) la base de datos.

Cuando lo hago, aparece el siguiente error:

Crear [dbo]. [Correspondencia] ... Msj 1934, nivel 16, estado 1, servidor (nombre del servidor), línea 1 CREAR TABLA ha fallado porque las siguientes opciones SET tienen configuraciones incorrectas: ''ANSI_WARNINGS, ANSI_PADDING''. Verifique que las opciones de SET sean correctas para usar con vistas indexadas y / o índices en columnas calculadas y / o índices filtrados y / o notificaciones de consulta y / o métodos de tipo de datos XML y / o operaciones de índices espaciales.

¿Alguien puede explicarme este error y ayudarme a resolverlo? Aquí está el script que el proyecto de base de datos usa para crear esta tabla.

PRINT N''Creating [dbo].[Correspondence]...''; GO SET ANSI_NULLS, QUOTED_IDENTIFIER ON; GO CREATE TABLE [dbo].[Correspondence] ( [Id] INT IDENTITY (1, 1) NOT NULL, [WorkbookId] INT NOT NULL, [ProviderId] UNIQUEIDENTIFIER NOT NULL, [MessageThreadId] INT NOT NULL, [MessageThreadType] AS ((1)) PERSISTED NOT NULL ); GO SET ANSI_NULLS, QUOTED_IDENTIFIER OFF; GO PRINT N''Creating PK_Correspondence...''; GO ALTER TABLE [dbo].[Correspondence] ADD CONSTRAINT [PK_Correspondence] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO


De acuerdo con BOL :

Las vistas e índices indexados en las columnas calculadas almacenan los resultados en la base de datos para referencia posterior. Los resultados almacenados son válidos solo si todas las conexiones que hacen referencia a la vista indizada o a la columna calculada indexada pueden generar el mismo conjunto de resultados que la conexión que creó el índice.

Para crear una tabla con una columna computada persistente, se deben habilitar las siguientes configuraciones de conexión:

SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON SET ARITHABORT ON SET CONCAT_NULL_YIELDS_NULL ON SET NUMERIC_ROUNDABORT ON SET QUOTED_IDENTIFIER ON

Estos valores se establecen en el nivel de la base de datos y se pueden ver usando:

SELECT is_ansi_nulls_on, is_ansi_padding_on, is_ansi_warnings_on, is_arithabort_on, is_concat_null_yields_null_on, is_numeric_roundabort_on, is_quoted_identifier_on FROM sys.databases

Sin embargo, las opciones SET también pueden establecerse mediante la aplicación cliente que se conecta a SQL Server.

Un ejemplo perfecto es SQL Server Management Studio que tiene los valores predeterminados para SET ANSI_NULLS y SET QUOTED_IDENTIFIER para ON. Esta es una de las razones por las que no pude duplicar inicialmente el error que publicó.

De todos modos, para duplicar el error, intente esto (esto anulará la configuración predeterminada de SSMS):

SET ANSI_NULLS ON SET ANSI_PADDING OFF SET ANSI_WARNINGS OFF SET ARITHABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET NUMERIC_ROUNDABORT OFF SET QUOTED_IDENTIFIER ON GO CREATE TABLE T1 ( ID INT NOT NULL, TypeVal AS ((1)) PERSISTED NOT NULL )

Puede corregir el caso de prueba anterior utilizando:

SET ANSI_PADDING ON SET ANSI_WARNINGS ON

Recomendaría ajustar estas dos configuraciones en su secuencia de comandos antes de la creación de la tabla y los índices relacionados.


En mi caso, estaba intentando crear una tabla de una base de datos a otra en MS SQL Server 2012. Haciendo clic con el botón derecho en una tabla y seleccionando Script Table como> DROP AND CREATE To> New Query Editor Window , se creó el siguiente script:

USE [SAMPLECOMPANY] GO ALTER TABLE [dbo].[Employees] DROP CONSTRAINT [FK_Employees_Departments] GO /****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/ DROP TABLE [dbo].[Employees] GO /****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Employees]( [EmployeeId] [int] IDENTITY(1,1) NOT NULL, [DepartmentId] [int] NOT NULL, [FullName] [varchar](50) NOT NULL, [HireDate] [datetime] NULL CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ( [EmployeeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_Departments] FOREIGN KEY([DepartmentId]) REFERENCES [dbo].[Departments] ([DepartmentID]) GO ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Departments] GO

Sin embargo, al ejecutar el script anterior devolvía el error:

SELECT falló porque las siguientes opciones SET tienen configuraciones incorrectas: ''ANSI_PADDING''. Verifique que las opciones de SET sean correctas para usar con vistas indexadas y / o índices en columnas calculadas y / o índices filtrados y / o notificaciones de consulta y / o métodos de tipo de datos XML y / o operaciones de índices espaciales.

La solución que he encontrado: habilitar la configuración en la parte superior del script de esta manera:

USE [SAMPLECOMPANY] GO /****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO ALTER TABLE [dbo].[Employees] DROP CONSTRAINT [FK_Employees_Departments] GO /****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/ DROP TABLE [dbo].[Employees] GO CREATE TABLE [dbo].[Employees]( [EmployeeId] [int] IDENTITY(1,1) NOT NULL, [DepartmentId] [int] NOT NULL, [FullName] [varchar](50) NOT NULL, [HireDate] [datetime] NULL CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ( [EmployeeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_Departments] FOREIGN KEY([DepartmentId]) REFERENCES [dbo].[Departments] ([DepartmentID]) GO ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Departments] GO SET ANSI_PADDING OFF GO

Espero que esto ayude.


Encontré la solución para este problema:

  1. Vaya a las propiedades del servidor.
  2. Selecciona la pestaña Conexiones .
  3. Compruebe si la opción ansi_padding está desmarcada.

Para mí, simplemente establecer el nivel de compatibilidad a un nivel superior funciona bien. Para ver C.Level:

select compatibility_level from sys.databases where name = [your_database]