【问题标题】:Are SQL stored procedures case sensitive?SQL 存储过程是否区分大小写?
【发布时间】:2009-02-03 20:15:19
【问题描述】:

例如...

ALTER PROCEDURE [dbo].[Reports_Dashboard_Get_Sav]   
    -- Add the parameters for the stored procedure here
    @startDate datetime,
    @endDate datetime,
    @companyID int=null

set @days=datediff(m,@startdate,@enddate)
if (@days)=0 
    set @days=1

这不是我的代码,但如果它区分大小写,那么 @days 将无法正确计算,因为 startDate/startdate 和 endDate/enddate 变量不匹配...

【问题讨论】:

    标签: sql-server stored-procedures case-sensitive


    【解决方案1】:

    它们可以是,具体取决于您的数据库的排序规则。当您安装 SQL Server 并选择默认排序规则时,您会注意到有一个“区分大小写”复选框。某些排序规则区分大小写,会影响您的查询(和存储过程)。

    更糟糕的是,许多供应商不会在具有区分大小写排序规则的服务器上测试他们的产品,这会导致运行时错误。

    【讨论】:

    • 啊,你打败了我——这是aspadvice.com/blogs/ssmith/archive/2007/09/30/…的链接
    • 这适用于变量名吗?还是只是数据?
    • 当我们在工作中获得对另一个数据库的访问权限时,我很惊讶地发现这一点 - 不仅数据库对象区分大小写,而且针对表数据的查询也是如此。
    • 但是如果找不到对象,您的查询将不会运行 - 它不仅仅是静默插入 NULL 或任何东西。现在它可能认为表不存在,但是在 LEFT JOIN 中,你不会只得到 NULL,因为表的情况不正确,你会得到一个错误。
    【解决方案2】:

    没有。至少不是 T-SQL...

    【讨论】:

    • 使用默认设置是正确的。但是,如果您的服务器使用区分大小写的排序规则,那么您会大吃一惊。我不知道为什么 MS 会做一些(恕我直言)非常愚蠢的事情。
    【解决方案3】:

    我记得,它们对 SQL 命令本身不区分大小写,我经常看到它们写成小写。我很确定其余部分也不区分大小写,因为它是 T-SQL 规范的扩展。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2010-09-14
      • 2011-03-24
      • 2010-11-27
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多