我明白錯誤的含義(您試圖在int中存儲大於int的數字),但無法看到這是從哪裏來的。scope_identity throwing System.Data.SqlClient.SqlException(0x80131904):將IDENTITY轉換爲數據類型的算術溢出錯誤int
由於錯誤身份提到的,我假設其調用SCOPE_IDENTITY()這是有問題的。我知道它返回十進制(38,0),但我的表應該永遠不會返回一個不是int的PK。
這段代碼運行好幾個月後,我剛剛開始接受這個問題。
幫助!!!!!
我有一個表,這個PK
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
呵呵!!!它實際上是一個最大的子表:檢查身份信息:當前身份值'2147483647',當前列值'2147483647' – kevcoder