Nous utilisons Visual Studio et un projet de base de données pour générer notre base de données.
Je viens d'apporter un certain nombre de modifications à la base de données (notamment l'ajout d'une nouvelle table nommée Correspondence
), de les importer dans le projet de base de données et de tenter de déployer (reconstruire) la base de données.
Lorsque je le fais, j'obtiens l'erreur suivante:
Création de [dbo]. [Correspondance] ... Msg 1934, Niveau 16, État 1, Serveur (Nom du serveur), Ligne 1 CREATE TABLE a échoué car les options SET suivantes ont des paramètres incorrects : 'ANSI_WARNINGS, ANSI_PADDING'. Vérifiez que les options SET sont correctes pour l’utilisation avec des vues indexées et/ou des index sur des colonnes calculées et/ou des index filtrés et/ou notifications de requête et/ou méthodes de type de données XML et/ou index spatial opérations.
Quelqu'un peut-il m'expliquer cette erreur et m'aider à la résoudre? Voici le script utilisé par le projet de base de données pour créer cette table.
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
Selon BOL :
Les vues indexées et les index sur les colonnes calculées stockent les résultats dans le fichier base de données pour référence ultérieure. Les résultats stockés ne sont valables que si tous connexions faisant référence à la vue indexée ou à la colonne calculée indexée peut générer le même jeu de résultats que la connexion qui a créé le fichier indice.
Pour créer une table avec une colonne calculée persistante, les paramètres de connexion suivants doivent être activés:
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
Ces valeurs sont définies au niveau de la base de données et peuvent être visualisées à l'aide de:
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
Cependant, les options SET peuvent également être définies par l'application cliente connexion à SQL Server.
Un exemple parfait est SQL Server Management Studio, qui a les valeurs par défaut pour SET ANSI_NULLS et SET QUOTED_IDENTIFIER sur ON. C'est l'une des raisons pour lesquelles je n'ai pas pu dupliquer initialement l'erreur que vous avez signalée.
Quoi qu'il en soit, pour dupliquer l'erreur, essayez ceci (cela remplacera les paramètres par défaut 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
)
Vous pouvez réparer le scénario de test ci-dessus en utilisant:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Je vous recommande de modifier ces deux paramètres dans votre script avant la création de la table et des index associés.
J'ai trouvé la solution à ce problème:
Dans mon cas, j'essayais de créer une table d'une base de données à une autre sur MS SQL Server 2012. Un clic droit sur une table et sélectionnez Table de script comme> DROP et CRÉER dans> Nouvelle fenêtre de l'éditeur de requête , le script suivant était créé:
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
Cependant, lors de l’exécution du script ci-dessus, l’erreur renvoyée:
SELECT a échoué car les options SET suivantes ont une valeur incorrecte paramètres: 'ANSI_PADDING'. Vérifiez que les options SET sont correctes pour l’utilisation avec des vues indexées et/ou des index sur des colonnes calculées et/ou filtrées des index et/ou des notifications de requête et/ou des méthodes de type de données XML et/ou opérations d'index spatial.
La solution que j'ai trouvée: Activer les paramètres en haut du script comme ceci:
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
J'espère que cette aide.
Pour moi, il suffit de régler le niveau de compatibilité sur un niveau supérieur. Pour voir C.Level:
select compatibility_level from sys.databases where name = [your_database]