SQL INNER JOIN,@Parameter-不筛选结果



提前感谢您给我的任何建议。

我试图实现的目标:我有一个组合框,我想用表1/columnC填充,按表1/columnB和表2/columnB中的匹配项排序。

例如:我想展示罗伯茨所有的土豆,而不是每个人的土豆。

我已经为此创建了一个存储过程。目前看起来是这样的:

CREATE PROCEDURE [dbo].[myProcedure]
@myParameter nvarchar
AS
SELECT columnA, columnB, columnC
FROM table1
INNER JOIN table2 ON table1.columnB = table2.columnB
WHERE table1.columnB = @myParameter

数据集:

DataSet MyDataSet() 
{
DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlDataAdapter da = new SqlDataAdapater("myProcedure", con)) 
{
da.SelectCommand.CommandType = CommandType.StoredProcedure;
//the line below gives value to my parameter, which in this case is a WinForms label
//with the table1/columnB, table2/columnB value (the name that I wish to sort by)
da.SelectCommand.Parameters.Add("@myParameter", SqlDbType.NVarChar).Value = label.Text.ToString();
da.Fill(ds);
}
return ds;
}

填充我的组合框(代码在表单加载事件中(:

try 
{
DataSet ds2 = MyDataSet();
myComboBox.DataSource = ds2.Tables[0];
myComboBox.DisplayMember = "columnC";
myComboBox.ValueMember = "columnA"; // hidden ID row
} 
catch (Exception ex) 
{
// messageboxcode
}

哦,如果重要的话,我的所有列都是nvarchar,除了table1/columnA,它是int。

希望我能理解,希望有人能给我一两个提示。关于我试图解决的问题,作为SQL的新手,我阅读了文档,观看了教程,通常花了几个小时试图弄清楚这一点。我只是因为某些原因不能!:-(

我可以说您的存储过程格式不正确,因为您在nvarchar()上没有长度永远不要在SQL Server中使用不带长度参数的char和相关类型。默认值因上下文而异,并且假设默认值符合您的要求只会导致难以调试的错误(嗯哼(。

在没有其他信息的情况下,您可以使用(max),但我建议您使用适当的参数长度值:

CREATE PROCEDURE [dbo].myProcedure (
@myParameter nvarchar(max)
) AS
BEGIN
SELECT columnA, columnB, columnC
FROM table1 JOIN
table2
ON table1.columnB = table2.columnB
WHERE table1.columnB = @myParameter;
END;

添加订单,如:

order by table1.columnB,table2.columnB

相关内容

  • 没有找到相关文章

最新更新