Как хранить более 8000 символов и назначать большие сцепленные строки в SQL server 2008?
Я пытаюсь объединить большое количество идентификаторов и обновить статус всех идентификаторов. Например: aclid in (4604019,4604018,4604017,4604016,4604015,4604014,4604013,4604012,4604011,4604010,4604009,4604008,4604007,4604006,4604005,4604004,4604003,4604002,4604001,4604000,4603999,4603998,4603997,4603996,4603995,4603994,4603993,4603992,4603991,4603990,4603989,4603988)
Please check my stored Procedure: ALTER PROCEDURE [dbo].[VT_ACLReportChangeStatus] ( @ChangeStatus nvarchar(50)=null, @ACLId nvarchar(max) ) AS /* Exec VT_ACLReportChangeStatus 'Complete','4599473,4599472,4599471,4599469,4599468' */ BEGIN UPDATE VT_ACLReport SET Status = @ChangeStatus WHERE ACLId in (Select * from SplitDelimiterString(@ACLId,',')) End Please check my code behind: In code i am getting all the id's may be more than 2000-3000, but it is updating only 1000 rows..how can i increase nvarchar(max) size , to take all id's. ACLId = ACLId.ToString().Trim(','); using (SqlConnection con = new SqlConnection(cs)) { cmd = new SqlCommand("VT_ACLReportChangeStatus", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandTimeout = 3600; cmd.Parameters.Add(new SqlParameter("@ACLId", SqlDbType.NVarChar,-1)); cmd.Parameters.Add(new SqlParameter("@ChangeStatus", SqlDbType.NVarChar, 50)); cmd.Parameters["@ACLId"].Value = ACLId; cmd.Parameters["@ChangeStatus"].Value = ddlChangeStatus.SelectedItem.Text.ToString(); con.Open(); cmd.ExecuteNonQuery(); con.Close(); }
Я пытаюсь объединить большое количество идентификаторов и обновить статус всех идентификаторов. Например: aclid in (4604019,4604018,4604017,4604016,4604015,4604014,4604013,4604012,4604011,4604010,4604009,4604008,4604007,4604006,4604005,4604004,4604003,4604002,4604001,4604000,4603999,4603998,4603997,4603996,4603995,4603994,4603993,4603992,4603991,4603990,4603989,4603988)
Тип AclId столбец имеет тип данных bigint-это личность.
Пожалуйста, не могли бы вы помочь мне в объединении большой строки и обновлении всех строк, чей aclid присутствует.
Согласно моему требованию , я должен обновить статус выбранных идентификаторов в той же таблице . поэтому я объединил все выбранные идентификаторы, а затем попытался обновить строки за один раз. но проблема возникает, если более 8000 символов, это не занимает больше 8000 символов в хранимой процедуре
Что я уже пробовал:
Please check my stored Procedure: ALTER PROCEDURE [dbo].[VT_ACLReportChangeStatus] ( @ChangeStatus nvarchar(50)=null, @ACLId nvarchar(max) ) AS /* Exec VT_ACLReportChangeStatus 'Complete','4599473,4599472,4599471,4599469,4599468' */ BEGIN UPDATE VT_ACLReport SET Status = @ChangeStatus WHERE ACLId in (Select * from SplitDelimiterString(@ACLId,',')) End Please check my code behind: In code i am getting all the id's may be more than 2000-3000, but it is updating only 1000 rows..how can i increase nvarchar(max) size , to take all id's. ACLId = ACLId.ToString().Trim(','); using (SqlConnection con = new SqlConnection(cs)) { cmd = new SqlCommand("VT_ACLReportChangeStatus", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandTimeout = 3600; cmd.Parameters.Add(new SqlParameter("@ACLId", SqlDbType.NVarChar,-1)); cmd.Parameters.Add(new SqlParameter("@ChangeStatus", SqlDbType.NVarChar, 50)); cmd.Parameters["@ACLId"].Value = ACLId; cmd.Parameters["@ChangeStatus"].Value = ddlChangeStatus.SelectedItem.Text.ToString(); con.Open(); cmd.ExecuteNonQuery(); con.Close(); }
Mehdi Gholam
Пакет документов
Member 13011316
Не могли бы вы помочь мне с более подробной информацией? как я могу паковать все идентификаторы
F-ES Sitecore
Объединенные идентификаторы-это не очень хорошее решение, это создаст всевозможные проблемы. Вместо этого используйте таблицы parent\child (также называемые one-to-many) и храните каждый идентификатор в отдельной строке дочерней таблицы. Это позволит вам делать такие вещи, как присоединение к идентификаторам и так далее.
Jörgen Andersson
Вы должны серьезно пересмотреть свое решение, оно не нормализовано, и это только первая проблема, с которой вы столкнетесь.
Следуйте совету F-ES Sitecores.