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