执行 SQL 服务器查询时的结果不同

本文关键字:结果 SQL 服务器 查询 执行 | 更新日期: 2023-09-27 18:31:54

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

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 Server管理工作室中的脚本返回所有记录?

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

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

执行 SQL 服务器查询时的结果不同

字符串的值超过了 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 函数容量;可能需要将其调整为某个大值 - 搜索一些接受大输入的拆分函数