Sql 参数存储过程中的Like函数

Sql 参数存储过程中的Like函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,你好 我对我的存储程序有以下问题: 我需要知道哪个经理有哪个员工 我的语句与函数as SELECT正常工作,但 我的问题是当我回缩0行时的过程。 我想应该是我在创建procerure时遇到的函数问题 谢谢你的意见 create procedure test @Name varchar(200) as WITH n(Surname,Name) AS (SELECT Surname,Name FROM [dbo].[phonebook] WHERE Name like '%

你好 我对我的存储程序有以下问题:

我需要知道哪个经理有哪个员工 我的语句与函数as SELECT正常工作,但 我的问题是当我回缩0行时的过程。 我想应该是我在创建procerure时遇到的函数问题

谢谢你的意见

create procedure test @Name varchar(200) as

WITH n(Surname,Name) AS 
   (SELECT Surname,Name
    FROM [dbo].[phonebook]
    WHERE Name like '%@Name' --I need to be like here beause before name is XT245*/ SUBCODE
        UNION ALL
    SELECT subs.Surname, subs.Name
    FROM [dbo].[phonebook] as subs, n
    WHERE n.Surname = subs.Boss)
SELECT  Name FROM n 

exec test 'XX37485*/John'
这句话:

其中名称类似于“%@Name”--我需要类似于此处,因为名称之前是XT245*/SUBCODE

正在查找具有相同字符模式的名称<代码>@N a m e。没有变量替换

如果要使用类似于的
,则:

WHERE Name like '%' + @Name

请注意,这要求模式以
@Name
结尾,因此它不会匹配字符串中的任何位置。

您没有使用参数。您使用的字符串包含字符%、@、N、a、m、e。改用
'%'+@Name
。当然,你应该知道这将是非常缓慢的,因为
%无论什么
都不能利用索引。像@name一样,不要将它括在单个引号中。这意味着我在创建过程时需要使用Like函数?如果名称包含非名称数据,你还是有一个严重的错误。一个字段应该包含一种信息。这是最基本的设计规则-1范式。修复数据库后,您就不需要这些奇怪的查询,也不需要处理糟糕的问题performance@Ven它不会,除非参数包含
%
字符,否则它将像
=
一样工作