SQL server赢了';当我将查询放入存储过程时,不会返回结果

SQL server赢了';当我将查询放入存储过程时,不会返回结果,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有一个存储过程 ALTER PROCEDURE GetLatestEquipmentReading @SerialNo VARCHAR(50), @UnitNo VARCHAR(50), @ElementID VARCHAR(50) AS BEGIN SET NOCOUNT ON; SELECT Equipcom.dbo.OIL_SAMPLE.* FROM Equipcom.dbo.EQUIPMENT INNER JOIN Equipc

我有一个存储过程

ALTER PROCEDURE GetLatestEquipmentReading
    @SerialNo VARCHAR(50),
    @UnitNo VARCHAR(50),
    @ElementID VARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT Equipcom.dbo.OIL_SAMPLE.*
    FROM Equipcom.dbo.EQUIPMENT
    INNER JOIN Equipcom.dbo.OIL_EQ_UNIT ON Equipcom.dbo.OIL_EQ_UNIT.equipmentid_auto = EQUIPMENT.equipmentid_auto
    INNER JOIN Equipcom.dbo.OIL_SAMPLE ON Equipcom.dbo.OIL_EQ_UNIT.equnit_auto = OIL_SAMPLE.equnit_auto
    INNER JOIN Equipcom.dbo.Oil_Sample_Reading ON Equipcom.dbo.Oil_Sample_Reading.labno_auto = OIL_SAMPLE.labno_auto
    WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE @SerialNo
    AND Equipcom.dbo.EQUIPMENT.unitno LIKE @UnitNo   

END
GO
当我尝试执行它时,我没有得到任何结果。但是,当我使用一些测试值在存储过程中运行查询时,我会得到结果


更奇怪的是,对于某些序列号和单元号,存储过程工作正常。

我的直觉是,问题出在where子句中。首先,您的LIKE的作用非常类似于等号(“=”),因为您没有使用任何通配符。如果想要精确匹配,我建议使用等号。你还想要和吗?认为每一行需要有一个匹配的serialNo和一个匹配的UnitNo吗

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE @SerialNo
      AND Equipcom.dbo.EQUIPMENT.unitno LIKE @UnitNo   
也许这就是你真正需要的。我不知道。如果您想给出一行示例数据和期望的结果,那么我很乐意提供帮助。但是我认为你需要在WHERE子句中分析你的逻辑

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE '%' + @SerialNo + '%'
      OR Equipcom.dbo.EQUIPMENT.unitno LIKE '%' + @UnitNo  + '%'

我的直觉是,问题在你的where条款中。首先,您的LIKE的作用非常类似于等号(“=”),因为您没有使用任何通配符。如果想要精确匹配,我建议使用等号。你还想要和吗?认为每一行需要有一个匹配的serialNo和一个匹配的UnitNo吗

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE @SerialNo
      AND Equipcom.dbo.EQUIPMENT.unitno LIKE @UnitNo   
也许这就是你真正需要的。我不知道。如果您想给出一行示例数据和期望的结果,那么我很乐意提供帮助。但是我认为你需要在WHERE子句中分析你的逻辑

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE '%' + @SerialNo + '%'
      OR Equipcom.dbo.EQUIPMENT.unitno LIKE '%' + @UnitNo  + '%'

我的直觉是,问题在你的where条款中。首先,您的LIKE的作用非常类似于等号(“=”),因为您没有使用任何通配符。如果想要精确匹配,我建议使用等号。你还想要和吗?认为每一行需要有一个匹配的serialNo和一个匹配的UnitNo吗

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE @SerialNo
      AND Equipcom.dbo.EQUIPMENT.unitno LIKE @UnitNo   
也许这就是你真正需要的。我不知道。如果您想给出一行示例数据和期望的结果,那么我很乐意提供帮助。但是我认为你需要在WHERE子句中分析你的逻辑

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE '%' + @SerialNo + '%'
      OR Equipcom.dbo.EQUIPMENT.unitno LIKE '%' + @UnitNo  + '%'

我的直觉是,问题在你的where条款中。首先,您的LIKE的作用非常类似于等号(“=”),因为您没有使用任何通配符。如果想要精确匹配,我建议使用等号。你还想要和吗?认为每一行需要有一个匹配的serialNo和一个匹配的UnitNo吗

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE @SerialNo
      AND Equipcom.dbo.EQUIPMENT.unitno LIKE @UnitNo   
也许这就是你真正需要的。我不知道。如果您想给出一行示例数据和期望的结果,那么我很乐意提供帮助。但是我认为你需要在WHERE子句中分析你的逻辑

WHERE Equipcom.dbo.EQUIPMENT.serialno LIKE '%' + @SerialNo + '%'
      OR Equipcom.dbo.EQUIPMENT.unitno LIKE '%' + @UnitNo  + '%'



如果它对某些值运行良好,但对其他值不返回任何值,则表明您的内部联接在某处返回NULL。将内部联接替换为左外部联接并重新测试。

如果它对某些值正常工作,但对其他值不返回任何值,则表明内部联接在某个地方返回NULL。将内部联接替换为左外部联接并重新测试。

如果它对某些值正常工作,但对其他值不返回任何值,则表明内部联接在某个地方返回NULL。将内部联接替换为左外部联接并重新测试。

如果它对某些值正常工作,但对其他值不返回任何值,则表明内部联接在某个地方返回NULL。将内部联接替换为左外部联接并重新测试。

尝试将
如@SerialNo
转换为
如“%”++@SerialNo++“%”
@GiorgosBetsos谢谢您的建议,但这并没有改变任何行为您确定要使用“内部联接”吗?尝试放置“外部联接”来测试SP一次…您是否在正确的数据库中-注意您已经硬编码了您的数据库名(运行
SELECT DB_NAME()
进行检查)?首先将正常工作的查询粘贴到SP中(不要使用任何参数)然后一个接一个地切换它们,直到您了解哪一个正在干扰您。尝试将
如@SerialNo
转换为
如“%+@SerialNo+'%”
@GiorgosBetsos谢谢您的建议,但这并没有改变任何行为您确定要使用“内部联接”吗?尝试放置“外部联接”来测试SP一次…您是否在正确的数据库中-注意您已经硬编码了您的数据库名(运行
SELECT DB_NAME()
进行检查)?首先将正常工作的查询粘贴到SP中(不要使用任何参数)然后一个接一个地切换它们,直到您了解哪一个正在干扰您。尝试将
如@SerialNo
转换为
如“%+@SerialNo+'%”
@GiorgosBetsos谢谢您的建议,但这并没有改变任何行为您确定要使用“内部联接”吗?尝试放置“外部联接”来测试SP一次…您是否在正确的数据库中-注意您已经硬编码了您的数据库名(运行
SELECT DB_NAME()
进行检查)?首先将正常工作的查询粘贴到SP中(不要使用任何参数)然后一个接一个地切换它们,直到您了解哪一个正在干扰您。尝试将
如@SerialNo
转换为
如“%+@SerialNo+'%”
@GiorgosBetsos谢谢您的建议,但这并没有改变任何行为您确定要使用“内部联接”吗?尝试放置“外部联接”来测试SP一次…您是否在正确的数据库中-注意您已经硬编码了您的数据库名(运行
SELECT DB_NAME()
进行检查)?首先将正常工作的查询粘贴到SP中(不要使用任何参数)然后一个接一个地切换,直到你明白是哪一个在打扰你,我想要的是平等。我也试过使用“=”,没什么区别。好吧,所以你把我的答案标上了,所以我希望你把所有的问题都解决了!是的,你在钱上做得很好,平等是我想要的。我也试过使用“=”,没什么区别。好吧,所以你把我的答案标上了,所以我希望你把所有的问题都解决了!是的,你在钱上做得很好,平等是我想要的。我尝试过使用“=”a