SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC
我想替换查找'TOP 100'字符串并将其替换为'TOP 200'或任何其他值。
你能告诉我如何在C#中做到这一点吗?
答案 0 :(得分:2)
听起来好像你只是想用另一个字符串替换部分字符串,如:
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");
答案 1 :(得分:1)
如果您在c#代码中编写查询,可以使用:
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
答案 2 :(得分:0)
DECLARE @topval int=100
SELECT TOP @topval * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC
答案 3 :(得分:0)
你想使用字符串替换功能。string replace function
答案 4 :(得分:0)
如果您没有使用存储过程,可以在C#中连接命令文本中的限制:
int toplimit = 200;
cmd.CommandText="SELECT TOP " + toplimit.ToString() + " * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC";
答案 5 :(得分:0)
我认为它应该像这个一样简单
private string GetSql(int maxRecords)
{
string statement = "SELECT TOP " + maxRecords + " FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC ";
return statement;
}
您还可以修改参数并更改SQL查询。
答案 6 :(得分:0)
我正在使用正则表达式。因为我认为这是在一个陈述中获得所有变化的最佳方式。
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给出的另一个版本的字符串。
答案 7 :(得分:0)
对于C#解决方案,您最好使用参数而不是字符串操作。
就像这样:
int count = 200;
var sql = string.Format("SELECT TOP {0} FROM [Rest_Of_Your_Query]", count);
如果您将使用参数,您将更容易知道何时更改(如果您只想在值为100时更换)和哪个值(200,300无论如何)。
对于SQL解决方案,请查看@Ganesh_Devlekar
的答案