SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC
Я хочу найти строку «TOP 100» и заменить ее на «TOP 200» или любое другое значение.
Подскажите, пожалуйста, как это сделать на С#?
SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC
Я хочу найти строку «TOP 100» и заменить ее на «TOP 200» или любое другое значение.
Подскажите, пожалуйста, как это сделать на С#?
если вы пишете запрос в своем коде С#, вы можете использовать:
int topCount=1000;
string query= "SELECT TOP ("+i.toString()+") * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC"
Но если вы хотите отправить параметр на свой SP, вы можете использовать:
Declare @i int=1000;
SELECT TOP (@i) * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC
Мне кажется, что вы просто хотите заменить часть строки на другую, например:
string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC";
sql = sql.Replace("TOP 100", "TOP 200");
Если число является динамическим и вы хотите заменить его другим, вы можете использовать регулярное выражение:
string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC";
string pattern = @"\bTOP\b *(\d+)";
sql = Regex.Replace(sql, pattern, m => "TOP 200");
Если вы не используете хранимые процедуры, вы можете объединить ограничение в тексте команды в C#:
int toplimit = 200;
cmd.CommandText="SELECT TOP " + toplimit.ToString() + " * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC";
Я думаю, что это должно быть так просто, как это
private string GetSql(int maxRecords)
{
string statement = "SELECT TOP " + maxRecords + " FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC ";
return statement;
}
вы также можете изменить параметры и изменить свой SQL-запрос.
Я бы использовал регулярное выражение для этого. Потому что я думаю, что это лучший способ получить все варианты в одном выражении.
string oldString = "Select top 500 from wherever";
string newLimit = "top 20";
string result = System.Text.RegularExpressions.Regex.Replace(oldString , "TOP (\\d)+",newLimit , System.Text.RegularExpressions.RegexOptions.IgnoreCase );
Итак, введите свою старую строку, замените любую строку «TOP x» другой версией, указанной как newLimit в моем примере.
Для решения C# лучше использовать параметр, а не манипулировать строкой.
просто так:
int count = 200;
var sql = string.Format("SELECT TOP {0} FROM [Rest_Of_Your_Query]", count);
если вы будете использовать параметр, вам будет легче узнать, когда его нужно изменить (в случае, если вы хотите заменить только значение 100) и на какое значение (200, 300 и т. д.).
Для решения SQL взгляните на ответ от @Ganesh_Devlekar