Я понимаю, что означает ошибка (вы пытаетесь сохранить число больше, чем int в int), но не можете видеть откуда это происходит.scope_identity throwing System.Data.SqlClient.SqlException (0x80131904): ошибка преобразования арифметического переполнения IDENTITY в тип данных int
Из-за упоминания IDENTITY в ошибке, я , предполагая, что его вызов scope_identity() является проблематичным. Я понимаю, что он возвращает десятичную (38,0), но моя таблица должна никогда не возвращать PK, который не является int.
Я только начал получать эту последнюю неделю после того, как этот код работал в течение нескольких месяцев.
Справка !!!!!
У меня есть таблица с этим ПК
CREATE TABLE [dbo].[plan_languages](
[plan_language_id] [int] IDENTITY(1,1) NOT NULL,
....
)
и хранимая процедура, которая возвращает созданный PK
CREATE PROC [dbo].[sp_plan_languages_insert] (
....,
,@new_pk INT = 0 OUTPUT
)
...
INSERT INTO dbo.plan_languages (...)
VALUES (...)
SET @new_pk = scope_identity()
и C# код, который выполняется, что хранимая процедура и получающий, что PK
private int InsertPlanLanguage(PlanLanguageDTO language)
{
int pk = 0;
try
{
using (SqlConnection con = new SqlConnection(DbConnetionString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.sp_plan_languages_insert";
....
cmd.Parameters.Add(new SqlParameter { ParameterName = "@new_pk", Direction = ParameterDirection.Output, DbType = DbType.Int32 });
cmd.ExecuteNonQuery();
if (cmd.Parameters["@new_pk"].Value != DBNull.Value)
{
pk = (int)cmd.Parameters["@new_pk"].Value;
}
}
и должен иметь много места
SELECT MAX(l.plan_language_id) from dbo.plan_languages l
возвращает 190891
duh !!! на самом деле это таблица для детей, которая достигла максимума: проверка идентификационной информации: текущее значение идентификатора «2147483647», текущее значение столбца «2147483647» – kevcoder