首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的存储过程的LIKE子句返回的数据与常规查询不同?

为什么我的存储过程的LIKE子句返回的数据与常规查询不同?
EN

Stack Overflow用户
提问于 2018-01-29 03:59:55
回答 1查看 32关注 0票数 1

我在SQL Server 2014中有以下存储过程:

代码语言:javascript
运行
复制
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中有以下数据:

代码语言:javascript
运行
复制
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

当我像这样执行存储过程时:

代码语言:javascript
运行
复制
EXEC [dbo].[GetOperatorNamesByComputer]
      @computer = N'F7', 
      @startdate = N'2017/10/01', @enddate = N'2017/10/31'
GO

它返回以F8开头的行,这似乎违背了我的搜索参数。实际上,在@computer参数中键入任何以字母F开头的内容都会返回以F开头的所有行,而不管参数中还有哪些字符。

但是当我执行常规查询时:

代码语言:javascript
运行
复制
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子句的预期行为,还是我在将查询转换为存储过程时做错了什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 04:06:14

存储过程声明中的nvarchar参数@computer需要长度。像nvarchar(20)一样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48490715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档