当前位置: 首页 > 知识库问答 >
问题:

执行SQL Server查询时的不同结果

诸葛卜霸
2023-03-14

在程序中有一部分代码,用于执行查询:

string SPROC = "#Some MSSQL Query#";
comm.CommandType = CommandType.Text;
comm.CommandText = SPROC;
comm.Parameters.Add(new SqlParameter("@Parameter1", SqlDbType.VarChar, 50)).Value = PARAM1;
comm.Parameters.Add(new SqlParameter("@Parameter2", SqlDbType.VarChar, 20)).Value = PARAM2;
comm.CommandTimeout = CurrentSettings.SQLTimeout;

conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(comm);
DataSet TempDS = new DataSet();
adapter.Fill(TempDS);

数据集 (TempDS) 表应该有大约 20000 条记录(行计数),但在程序内部,它在调试模式下说只有 20 条记录。

我在同一个数据库表上单独运行了脚本,该表在 SQL Server 连接字符串中使用,但在 SQL Server Management Studio 中,它按预期返回了 20000 条记录。

该脚本看起来像:

Select 
    [Table1].Column1,[Table2].Column1 
From 
    [Table1]
Inner Join 
    [Table2] on ([Table2].Column1 = [Table1].Column2)
Where 
    [Table2].Column1 = @Parameter1 
    and ([Table1].Column1 in (Select * from dbo.Split(@Parameter2,','))

它是相同的脚本文本,代码也会执行该文本。

有人知道为什么程序代码只返回部分记录,而SQL服务器管理工作室中的脚本返回所有记录吗?

另外,我还检查了SQLTimeOut,它被设置为240,因此有足够的时间正确返回记录。@Parameter1和@Parameter 2是字符串变量。

string PARAM1 = "Random1"; //in C#
string PARAM2 = "Random2,Random3,Random4,Random5"; //in C#
@Parameter1 = PARAM1
@Parameter2 = PARAM2

共有1个答案

严俊友
2023-03-14

字符串的值超过了C中的参数长度#

string PARAM2 = "Random2,Random3,Random4,Random5"; //in C#

comm.Parameters.Add(new SqlParameter("@Parameter2", SqlDbType.VarChar, 20)).Value = PARAM2;

所以你需要在这里分配更多的长度

尝试使用AddWithValue:https://msdn . Microsoft . com/en-us/library/system . data . sqlclient . sqlparametercollection . AddWithValue(v = vs . 110)。aspx

注意:如果您这样做,请注意输入的SPLIT功能容量;它可能需要调整为一些大值-搜索一些需要大量输入的拆分函数

 类似资料:
  • 问题内容: SQL2008。 我有一个测试表: 我用10k测试行填充它。 我运行以下两个查询: 我不知道为什么这两个查询有不同的执行计划。 查询1确实针对UQ_Sale_RowVersion索引进行索引搜索。 查询2对PK_Sale进行索引扫描。 我想查询2做索引查找。 我将不胜感激。 谢谢你。 [编辑] 尝试使用datetime2而不是rowversion。同样的问题。 我也尝试强制使用索引(查

  • 使用JDBC驱动程序,我如何使用来自不同查询的多个结果集,而不不断地打开和关闭连接,因为我正在提取所需的w.e并将其传递给另一个方法。每次打开新的conn、语句和结果集时 我试图在一个方法中使用多个结果集,但它一直抛出异常,称结果集已关闭。我没有太多的SqlServver经验,所以任何指导都会有所帮助:-)

  • 我正在将数据插入MySQL数据库,但在执行insert语句时出错: 语句的结果集不能为null。执行。 虽然如果我检查数据库表,我发现值已经成功插入。这是令人困惑的。 代码片段

  • 继续原问题:为了测试这一点,我制作了一个表的近似副本。尽管执行路径相同、数据相同、表示意图非常相似,但对复制表的性能(查询时间)明显比源表差。 在本例中,我们有以下3个表: > 提供_clicks 在这之后,我们开始运行一些测试查询。正如您所看到的,对“offers_new”表的查询时间大约是“offers”表的10倍。 请注意,这两个查询的执行路径完全相同: null null 计数非常接近。O