【问题标题】:Getting an error while running this T-SQL code运行此 T-SQL 代码时出错
【发布时间】:2017-09-01 05:18:27
【问题描述】:

我在编写此代码时遇到错误。我该如何解决? 它说错误在'in'

CREATE PROCEDURE spPracticum
    (@MaxCountry As VARCHAR,
     @MinCountry As VARCHAR)
AS
    SELECT 
        [Country], [Year], [Subscribers], c.[name]
    FROM 
        [dbo].[cell phone subscribers] AS s
    JOIN
        [dbo].[countries] AS c ON s.[Country] = c.[country-code]
    WHERE 
        @MinCountry <= Country 
        AND @MaxCountry >= Country IN (SELECT MAX(Subscribers) 
                                       FROM [dbo].[cell phone subscribers] )
    ORDER BY
        Year

【问题讨论】:

  • 你可能正在尝试这个@MaxCountry &gt;= Country and country in (Select max query)
  • 我可以看到两个错误。首先,您的 create 语句中没有括号(使用函数而不是 procs 中的括号)其次,您的 where 子句。 @ min = Country... 从这里你的 "IN(select...) 没有意义。
  • Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何varchar 变量和参数提供一个长度。在您的情况下, both 参数默认为 1 字符的长度 - 这通常 不是 您想要的....
  • 我严重怀疑您是否正在尝试检查 Country 是否与 Subscribers 的最大值相关 - 所以我们是您甚至 尝试 做的在那个WHERE 子句中?
  • 前面的评论员对问题的描述已经足够好了。以后如果遇到错误,至少提供错误信息!

标签: sql-server tsql


【解决方案1】:

您现在遇到的具体错误(我假设是 Incorrect syntax near the keyword 'IN'. 是由于您的 WHERE 子句的第二部分:

 AND @MaxCountry >= Country IN (SELECT MAX(Subscribers)                                       
                                FROM [dbo].[cell phone subscribers] )

这是一个无效的语句 - 您可以使用 AND @MaxCountry &gt;= Country 仅返回 s.[Country] 值小于或等于为 @MaxCountry 参数提供的值的记录,但您不能随后添加 IN声明到此结束,因为它没有任何意义,并且 SQL 不理解您要执行的操作。

我并不完全清楚您想要做什么,所以我无法提供更多的指导 - 如果您能澄清您的问题,让我们对预期和当前有所了解基于给定输入的输出,那么我们也许可以提供进一步的帮助。

尝试阅读Help Center 中的How do I ask a good question? 文章,也许与How to create a Minimal, Complete, and Verifiable example 一起阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2020-10-03
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多