Sql 选择查询2号的问题?
我只是在选择palletnumber=datatype为int时创建了这个存储过程。 SerialNumber是varchar。 然后托盘编号是1-200..但是如果我输入2,它会显示2和其他托盘编号。 我将@search更改为nchar,它是ok,但serialnumber是有错误的。 我是存储过程中的新手Sql 选择查询2号的问题?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我只是在选择palletnumber=datatype为int时创建了这个存储过程。 SerialNumber是varchar。 然后托盘编号是1-200..但是如果我输入2,它会显示2和其他托盘编号。 我将@search更改为nchar,它是ok,但serialnumber是有错误的。 我是存储过程中的新手 ALTER PROCEDURE [dbo].[sp_SearchFresh] -- Add the parameters for the stored procedure here
ALTER PROCEDURE [dbo].[sp_SearchFresh]
-- Add the parameters for the stored procedure here
@Search varchar(50)--so that i only have one search engine/input box
AS
SELECt dbo.Monitor.SerialNumber,
WIP.dbo.WIPTEST.PartNumber,
dbo.Monitor.PalletNumber
FROM WIP.dbo.WIPTEST
INNER JOIN dbo.Monitor
ON WIP.dbo.WIPTEST.SerialNumber = dbo.Monitor.SerialNumber
WHERE WIP.dbo.WIPTEST.StatusDescription = 'FG-FRESH'
AND (dbo.Monitor.PalletNumber = @Search
OR dbo.Monitor.SerialNumber LIKE @Search + '%' )
END
我将练习动态SQL。但是如何在ui上提供空值呢? 这是我的DAL代码 公共数据集FGU搜索网格(智能用户) {
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand("sp_SearchFresh", conn);
cmd.CommandType = CommandType.StoredProcedure;
DataSet dSet = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Parameters.Add("@Search", SqlDbType.VarChar, 50).Value = user.Search;
try
{
conn.Open();
da.Fill(dSet, "WIPDATA");
conn.Close();
}
catch (SqlException)
{
throw;
}
return dSet;
}
确保您获取的托盘编号没有以2开头的序列号?确保您获取的托盘编号没有以2开头的序列号?以使@Search和palletnumber作为int try进行评估
AND (dbo.Monitor.PalletNumber = cast(@Search as int)
要使@Search和palletnumber计算为int,请尝试
AND (dbo.Monitor.PalletNumber = cast(@Search as int)
您很快就会发现,使用单个参数无法很好地为具有不同数据类型的多个筛选条件提供服务。请让自己更轻松,并接受以下事实:对于要提供的每个单独的筛选条件,必须有一个单独的存储过程参数
ALTER PROCEDURE [dbo].[sp_SearchFresh]
@Searchvarchar(50),
@pallet_num INT
作为
您很快就会发现,使用单个参数无法很好地为具有不同数据类型的多个筛选条件提供服务。请让自己更轻松,并接受以下事实:对于要提供的每个单独的筛选条件,必须有一个单独的存储过程参数
ALTER PROCEDURE [dbo].[sp_SearchFresh]
@Searchvarchar(50),
@pallet_num INT
作为
注意“捕获所有查询”,因为它们总是会导致全表扫描。如果您不知道它们,请查看Gail Shawn的博客
使用可选参数确保索引利用率的唯一方法是动态SQL(确保使用sp_executesql以避免SQL注入):
注意“捕获所有查询”,因为它们总是会导致全表扫描。如果您不知道它们,请查看Gail Shawn的博客
使用可选参数确保索引利用率的唯一方法是动态SQL(确保使用sp_executesql以避免SQL注入):
当@Search不包含任何数值时会发生什么?;)这是一个值得关注的问题。但是,对于他的问题范围,我了解到现在的主要焦点是对两种不同的数据类型使用相同的参数。当@Search不包含任何数值时会发生什么?;)这是一个值得关注的问题。但是,对于他的问题我读到现在的主要焦点是对两种不同的数据类型使用相同的参数。所以我需要在我的UI上创建不同的输入框?@Crimsonland:是的-你应该向你的UI添加输入。你的用户也会更清楚地知道这些数据用于什么,以及如何使用表单。好的,先生,我会尝试这样做。我怎样才能如何使用n层列表视图控制值?目前我正在使用数据网格和数据集过滤搜索,我还不知道数据读取器。@OMG Ponies:注意捕获所有查询。请参阅下面的答案。欢迎,Flo@FlorianReischl:动态SQL是我对这种情况的偏好,但只有当OP ac当然,这些应该是单独的参数。此外,一些商店不允许动态SQL作为规则,所以我在建议动态SQL解决方案时会小心行事。因此我需要在我的UI上创建不同的输入框?@Crimsonland:是的-你应该向你的UI添加输入。你的用户也会更清楚这些数据用于什么,以及如何使用它们表单。好的,先生,我将尝试这样做。我如何使用n层的列表视图控件显示值?目前我正在使用数据网格和数据集来过滤搜索,我还不知道数据读取器。@OMG Ponies:小心捕获所有查询。请参阅下面我的答案。欢迎,Flo@FlorianReischl:动态SQL是我在诸如ese,但只有当OP接受这些应该是单独的参数时,这才值得追求。此外,一些商店不允许动态SQL作为规则,因此我在建议动态SQL解决方案时会小心行事。它是有效的。我将练习动态SQL。但我如何在我的ui上提供空值?这是我的DAL代码。它有效。我将练习动态SQL.但我如何在我的ui上提供空值?这是我的DAL代码