改成set @sql_str="select * from medication where "+@term_str能够正确执行这说明楼主做了设置,允许使用双引号做为字符串边界.
所以感觉问题不是在引号上.

解决方案 »

  1.   

    set @sql_str="select top 10 * from medication where "+@term_str双引号是否要改成单引号
      

  2.   

    set @sql_str="select * from medication where "+@term_str
    能正确执行吗?
    不行吧
      

  3.   

    是否和
    where后面的@term_str变量内容有关系
      

  4.   

    to: netcoder(朱二)
    当 SET QUOTED_IDENTIFIER 为 ON(默认)时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。当 SET QUOTED_IDENTIFIER 为 OFF 时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。在进行连接时,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 设置默认为 OFF。创建表时,QUOTED IDENTIFIER 选项在表的元数据中始终存储为 ON,即使该选项在创建表时设置为 OFF。当创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,用于该存储过程的后续调用。当在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。当 SET ANSI_DEFAULTS 为 ON时,将启用 SET QUOTED_IDENTIFIER。SET QUOTED_IDENTIFIER 还与 sp_dboption 的 quoted identifier 设置相对应。如果 SET QUOTED_IDENTIFIER 为 OFF,则 SQL Server 使用 sp_dboption 的 quoted identifier 设置。有关数据库设置的更多信息,请参见 sp_dboption 和设置数据库选项。SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。
      

  5.   

    你们都没发现问题所在,变量定义太小了:
    declare @sql_str nvarchar(4000)
      

  6.   

    declare @sql_str nvarchar(50)

    set @sql_str="select top 10 * from medication where "+@term_str
    ////////////////////////////
    50是小了些吧,,
    通常@sql_str都定义上千的比较保险:)