我在SQL Server 2014中有以下存储过程:
CREATE PROCEDURE [dbo].[GetOperatorNamesByComputer]
(@computer nvarchar,
@startdate datetime,
@enddate datetime)
AS
BEGIN
SELECT
ROW_NUMBER() OVER (ORDER BY MachineID) AS ID,
MachineID, User, [Datetime]
FROM
MyTable
WHERE
MachineID LIKE @computer + '%'
AND ([Datetime] BETWEEN @startdate AND @enddate)
AND Description = 'Interesting Data'
END我在MyTable中有以下数据:
MachineID User Datetime Description
------------------------------------------------------------------
F8;rweoi32234 person1 2017-10-31 00:01:01 Interesting Data
Test;fjdkkk11 person2 2017-10-20 00:02:00 Interesting Data当我像这样执行存储过程时:
EXEC [dbo].[GetOperatorNamesByComputer]
@computer = N'F7',
@startdate = N'2017/10/01', @enddate = N'2017/10/31'
GO它返回以F8开头的行,这似乎违背了我的搜索参数。实际上,在@computer参数中键入任何以字母F开头的内容都会返回以F开头的所有行,而不管参数中还有哪些字符。
但是当我执行常规查询时:
SELECT
ROW_NUMBER() OVER (ORDER BY MachineID) AS ID,
MachineID, User, [Datetime]
FROM
MyTable
WHERE
MachineID LIKE 'F7%'
AND ([Datetime] BETWEEN '2017/10/01' AND '2017/10/31')
AND Description = 'Interesting Data'正如预期的那样,它不返回任何行,并且当将MachineID部件更改为'F8%‘时,它将返回一行。
这是存储过程中LIKE子句的预期行为,还是我在将查询转换为存储过程时做错了什么?
谢谢。
发布于 2018-01-29 04:06:14
存储过程声明中的nvarchar参数@computer需要长度。像nvarchar(20)一样
https://stackoverflow.com/questions/48490715
复制相似问题