62,047
社区成员
发帖
与我相关
我的任务
分享
USE tempdb
GO
IF OBJECT_ID('stuInfo') IS NOT NULL DROP TABLE stuInfo
GO
CREATE TABLE stuInfo(
stuId INT IDENTITY(1,1) PRIMARY KEY,
stuName NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO stuInfo(stuName) VALUES(N'小明');
INSERT INTO stuInfo(stuName) VALUES(N'小华');
GO
-------- 以上为测试表及测试数据 ---------
--1. 最原始的写法
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE N'%华%'
--2. 字符串变量中不带 % 的写法(将上面 '%华%' 全部替换为变量即可)
DECLARE @stuName NVARCHAR(20)
SET @stuName=N'%华%'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE @stuName
--3. 字符串变量中不带 % 的写法
DECLARE @stuName2 NVARCHAR(20)
SET @stuName2=N'华'
SELECT * FROM stuInfo AS si WHERE si.stuName LIKE '%' + @stuName2 + '%'
myCmd.Parameters.Add("@stuName", SqlDbType.VarChar, 50).Value = "%" + this.txtName.Text.Trim() + "%";
也就是说不要写单引号。param like @param
通配符 %_之类的就是字符串param的组成部分之一
如果你写成 '%param%',这时候param就只表示字符串sql = "......... like '%" + this.txtName.Text.Trim().Replace("'","''") + "%'";
这样来写代码,到底是拼接字符串形式还是参数形式更加简洁,你可以自己选择。没有必要硬要规定只能用参数形式。
要注意,通常必须写 Replace 函数,以保证符合 t-sql 语法(必须将字符串常量中的单引号替换为两个单引号)。
拼接字符串,这样写代码,有时候比参数形式反而简单。特别是可以直接打印最终的 sql 语句放到日志里边。
like '%@stu%'
这个只能被 t-sql 语法解析为一部分字符串,不会解析为你用了什么变量。like '%' + @stu + '%'