][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 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
我没有追问积分了哎

参考技术A like 之前如果是字符串的话,需要增加单引号:
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 APPLYCROSS APPLY 而不是内连接或左外连接?

所以如果可能的话,请使用相同的场景,应该使用OUTER APPLY or CROSS APPLY,谢谢

【问题讨论】:

您可以在可以使用joins 的情况下使用它们。您可以将apply 用于join 不容易工作的其他情况,例如调用表值函数、从相关子查询返回多行以及从每个匹配项中提取前 行。 @Gordon Linoff :- 你能给出你所说的一小部分样本吗?谢谢 【参考方案1】:

这是一个不能重写为 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 用啥语句对表内数据进行关键字搜索

sql server 数据库换行符怎么使用

sql server 数据库换行符怎么使用

sql server 2000 如何改变 default属性

sqlserver2005模糊查询分页具体该怎么实现?

Is contains 相当于 SQL Server 中的 Like