Nous avons un problème très étrange avec une base de données qui a été déplacée de la mise en scène à la production.Sql Exception: Erreur de conversion du type de données numérique en numérique
La première fois que la base de données a été déplacée, c'était en la détachant, en la copiant et en la rattachant, la deuxième fois que nous avons essayé de la restaurer à partir d'une sauvegarde de la mise en scène.
Les deux serveurs SQL sont la même version de MS SQL 2008, fonctionnant sur du matériel 64 bits.
Le code accédant à la base de données est la même version, construite à l'aide du framework .net 2.0.
Voici le message d'erreur et une partie de la trace de la pile:
Exception Details:
System.Data.SqlClient.SqlException: Error converting data type numeric to numeric.
Stack Trace:
[SqlException (0x80131904): Error converting data type numeric to numeric.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1953274
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4849707
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +204
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +175
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
Version Information: Microsoft .NET Framework Version:2.0.50727.4200; ASP.NET Version:2.0.50727.4016
Si j'utilise Red Gate SQL Comparer pour comparer la base de données de mise en scène et en direct, ils sont les mêmes.
Voici la procédure stockée qui provoque l'erreur sur le serveur en direct:
ALTER PROCEDURE [dbo].[File_Files_InsertUpdateSingleItem]
(
@FileId numeric(18,0) output,
@Filename nvarchar(255),
@Guid uniqueidentifier,
@Name nvarchar(100),
@ContentType nvarchar(50),
@Size numeric(18, 0),
@Description nvarchar(2000),
@DateCreated datetime,
@DateModified datetime,
@IsUserUploaded bit,
@UploadedByUserID numeric(18, 0)
)
AS
SET NOCOUNT ON
IF @FileId > 0
BEGIN
UPDATE
[dbo].[File_Files]
SET
[Filename] = @Filename,
[GUID] = @Guid,
[Name] = @Name,
[ContentType] = @ContentType,
[Size] = @Size,
[Description] = @Description,
[DateCreated] = @DateCreated,
[DateModified] = @DateModified,
[IsUserUploaded] = @IsUserUploaded,
[UploadedByUserID] = @UploadedByUserID
WHERE
[FileID] = @FileId
END
ELSE
BEGIN
INSERT INTO [dbo].[File_Files](
[Filename],
[GUID],
[Name],
[ContentType],
[Size],
[Description],
[DateCreated],
[DateModified],
[IsUserUploaded],
[UploadedByUserID])
VALUES(
@Filename,
@Guid,
@Name,
@ContentType,
@Size,
@Description,
@DateCreated,
@DateModified,
@IsUserUploaded,
@UploadedByUserID)
SET @FileId = scope_identity()
END
instantanément mon nom d'utilisateur préféré/icône combo, +1 – slf
S'il vous plaît poster le DDL de la table File_Files, extrait de votre production base de données. Merci. –