][SQL Server]关键字 'like' 附近有语法错误。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了][SQL Server]关键字 'like' 附近有语法错误。相关的知识,希望对你有一定的参考价值。
et rsnews = Server.CreateObject("ADODB.Recordset")
rsnews.ActiveConnection = MM_comm_STRING
rsnews.Source = "select * from news where " + Replace(rsnews__searchradio, "'", "''") + " like '%" + Replace(rsnews__search, "'", "''") + "%' and judge_nn='notice' order by news_ID desc"
rsnews.CursorType = 0
rsnews.CursorLocation = 2
rsnews.LockType = 1
rsnews.Open()
ADODB.Field: BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
我没有追问积分了哎
where '" + Replace(rsnews__searchradio, "'", "''") + "' like
最好是将完整的SQL语句打印出来,然后看看哪里出的问题?
可以借助工具去调试 参考技术B rsnews__searchradio是字段名吗?
如果是,最好用方括号围起来,并去掉那个replace函数。
rsnews.Source = "select * from news where [" + rsnews__searchradio + "] like '%" + Replace(rsnews__search, "'", "''") + "%' and judge_nn='notice' order by news_ID desc"追问
%
Dim rsnews__searchradio
If (request.form("searchradio") "") Then
rsnews__searchradio = request.form("searchradio")
End If
%>
"") Then
rsnews__search = request.form("search")
End If
%>
图片看不出来ID,可能是吧。你可以试试我改过的代码。
追问不行哎,我想达到一种搜索的效果,form里面有单选按钮还有文本域,单选按钮选项就是news表里的各个列,让客户在文本域输入想搜索的关键字,选上单选按钮也就是按什么搜索,然后都通过request.form得到客户选择的信息,然后用数据库查询语言得到记录,通过like'%关键字%'来搜索,为什么老提示出错呢
追答明白你的意思。错误提示还是“关键字 'like' 附近有语法错误"?
调试一下,看看rsnews.Source 的值什么,贴上来看看。
调不出来,我没有设置初始值,如果客户不选择的话,应该不会有内容
追答问题可能就出现在这里,没有指定搜索的列名。你可以设置一个默认选定的Radio,从而确保rsnews__searchradio不为空。
本回答被提问者采纳 参考技术C 这dreamweaver生成的代码还真是看不得。 参考技术D 你把rsnews.Source输出来看看,就是到sql哪里有问题了你这样全都带有字符串,鬼知道哪里出问题呢
SQL Server APPLY AND JOIN 关键字指南
【中文标题】SQL Server APPLY AND JOIN 关键字指南【英文标题】:Guideline for SQL Server APPLY AND JOIN Keyword 【发布时间】:2014-03-18 11:22:06 【问题描述】:我正在阅读一篇关于使用apply & join
关键字的文章。查看一些 SQL,其中一个示例使用内部联接,而其他示例使用 apply 关键字。
这是表格图片
SELECT E.EMPID, E.NAME, E.DEPTID, D.NAME
FROM EMPLOYEE E
INNER JOIN DEPARTMENT D ON E.DEPTID = D.DEPTID
SELECT E.EMPID, E.NAME, E.DEPTID, CA.NAME
FROM EMPLOYEE E
CROSS APPLY
(SELECT * FROM DEPARTMENT D WHERE D.DEPTID = E.DEPTID) CA
两个查询都返回相同的输出和相同的执行计划。这是图片
再次使用外部应用和左外部连接
SELECT E.EMPID, E.NAME, E.DEPTID, D.NAME
FROM EMPLOYEE E
LEFT JOIN DEPARTMENT D ON E.DEPTID = D.DEPTID
SELECT E.EMPID, E.NAME, E.DEPTID, OA.NAME
FROM EMPLOYEE E
OUTER APPLY
(SELECT * FROM DEPARTMENT D WHERE D.DEPTID = E.DEPTID) OA
现在两个查询再次产生相同的输出和相同的执行计划。所以我只是不明白在什么样的情况下应该使用OUTER APPLY
或CROSS APPLY
而不是内连接或左外连接?
所以如果可能的话,请使用相同的场景,应该使用OUTER APPLY or CROSS APPLY
,谢谢
【问题讨论】:
您可以在可以使用join
s 的情况下使用它们。您可以将apply
用于join
不容易工作的其他情况,例如调用表值函数、从相关子查询返回多行以及从每个匹配项中提取前这是一个不能重写为 JOIN 的 APPLY 示例:
SELECT ...
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
您可以将 APPLY 视为关联关系的 JOIN。 JOIN 不允许关联,两个连接的关系必须是独立的。例如,以下是不正确的:
select *
from sys.objects o1
join (
select *
from sys.objects o2
where o1.object_id = o2.object_id) as o3
on 1=1;
Msg 4104, Level 16, State 1, Line 6
The multi-part identifier "o1.object_id" could not be bound.
但是,同样可以表示为 APPLY:
select *
from sys.objects o1
cross apply (
select *
from sys.objects o2
where o1.object_id = o2.object_id) as o3;
o1.object_id
is 在子查询中可用,因为 APPLY 允许关联。最重要的用例是表值函数,就像我最初的示例一样,因为 APPLY 允许将“主”表的列作为参数传递给函数。
CROSS APPLY 和 OUTER APPLY 之间的区别与 JOIN 完全相同,OUTER 情况允许返回不匹配的行(APPLY 返回空结果集),并带有 NULL在相应的内表列中。
【讨论】:
CROSS Apply 表示交叉连接?是笛卡尔积吗??【参考方案2】:您想要做的一个相对常见的事情是基于拆分器将一列拆分为多个值。因此,网络上有各种split()
功能(实际上很多很多)。 Here 是一个小例子,来源于对此类问题的随机回答:
SELECT d.RawKey, d.delimitedstring, d.delimitedvalues,
c.items SplitString,
c.rn
FROM dbo.tblRawData d CROSS APPLY
dbo.Split(d.DelimitedString, ',') c
这将是杀手级应用,因为在 SQL 语句中没有其他方法可以做到这一点。
另一种情况是返回多个可能有相关子查询的值:
select t1.*,
(select t2.col from table2 t2 where t2.col1 = t1.col2) as newcol
from table1 t1;
很简单,但是如果您想返回多个列,则需要多个子查询。而是:
select t1.*, t2.*
from table1 t1 cross apply
(select t2.col1, t2.col3, t2.col4
from table2 t2
where t2.col1 = t1.col2
) t2;
这可能是使用其他运算符编写的(尤其是在这种简单的情况下)。但是如果table2
真的是多张表和其他逻辑联结在一起的话,重写这个可能相当复杂。
不过,一般来说,您应该在适当的时候坚持使用join
。也许在 10 年后,这看起来会像 from
子句中的 ,
一样“过时”。但就目前而言,连接是 SQL 和数据处理中的一个关键思想。
【讨论】:
以上是关于][SQL Server]关键字 'like' 附近有语法错误。的主要内容,如果未能解决你的问题,请参考以下文章
sql server 2008 用啥语句对表内数据进行关键字搜索