t-sql 双引号 单引号


背景


无论何时使用代码,都必须有一种方法将实际代码(应直接解释)与应解释为数据的文字字符串区分开。 数字通常不存在此问题,但日期也可以。

Debug.Print Me.ControlName
refers to a control on a form.  Whereas,
Debug.Print "Me.ControlName"
simply prints the literal text
Me.ControlName


每个报价类型(“或”)的使用位置


在某些地方(遵循详细信息),任何一个都可以工作。 我希望说服您,为了清楚和一致起见,在您使用的地方使用适当的类型将是您的最大利益。 清晰,因为在没有这种额外视觉提示的情况下,读取同时需要两种类型的字符串的代码可能会非常混乱(请参考很多以此为基础的文章)。

VBA中的字符串需要使用双引号(“)来定界。单引号(')无法使用。

在大多数情况下,SQL中的字符串都可以使用。 SQL的ANSI标准指定它应为单引号('),但MS Access明智地决定更加灵活并支持两种引号类型。 这允许经验不足的用户进入并更轻松地使用它。 这也意味着他们在迷茫之前不能走太远:(。

我强烈建议您保留此处的标准,因为它会使SQL SO的那些令人困惑的字符串操作更容易掌握。


嵌入式行情(常规)


有时,您会遇到要求指定一个字符串的要求,该字符串包含用于定界字符串的字符(“或”)。

推荐的处理方法是加倍使用的报价。

假设您要将方括号中的文本分配给strDisp字符串-[请从列表中选择“鲍勃”。],您会说:

strDisp = "Please select ""Bob"" from your list."


在某些情况下,也可以改用“其他”引号字符:

strDisp = "Please select 'Bob' from your list."


这比较容易,但是我建议在涉及SQL或其他解释引擎时避免使用此方法。 为SQL构建字符串


但是在MS Access中,我们遇到了需要使用包含嵌入式字符串的字符串的情况。 特别是使用SQL代码。

要求是在VBA(SQL指令)中构建一个字符串,然后该字符串可能包含要由SQL解释的字符串文字。 SQL最终应类似于:

SELECT * FROM [TableName] WHERE ([AccountName]='Hieronymous')


使用正确的引号就足够简单了:

strSQL = "SELECT * FROM [TableName] WHERE ([AccountName]='Hieronymous')"


人们在建弦时开始感到困惑。 对此的典型要求是行连续(SQL字符串可能非常长且混乱),并使用表单中的字符串或日期项填充WHERE子句。

假设我们是从表单的模块中创建此字符串,并且有一个带有帐户名称的ComboBox(cboAccount),那么我们的代码将类似于以下内容(行尾的_表示将下一行视为当前版本的延续。):

strSQL = "SELECT *" & VbCrLf & _
         "FROM [TableName]" & VbCrLf & _
         "WHERE ([AccountName]='" & Me.cboAccount & "')"


假设从列表中选择了Hieronymous,这将导致将完全相同的字符串分配给strSQL。

然后可以将该字符串传递给SQL解释器

DoCmd.RunSQL strSQL


然后,SQL解释器将处理嵌入的文字字符串。


注意 其实


DoCmd.RunSQL仅适用于操作查询,因此不适用于这样的SELECT SQL字符串,但这与该概念不太相关。

关键是,但是,如果您使用的是SQL,则现在已经准备好使用strSQL。 日期 (#)


这涉及更多一点,因此值得拥有自己的线程(


文字日期时间及其定界符(#)。

)。 调试


很容易出错,因此我总是建议在开发代码时,甚至在您知道某个地方存在问题的地方,在将字符串传递给SQL引擎之前,先执行“ Debug.Print strSQL”。 在VBA窗口中使用Ctrl-G来显示并转到显示字符串的立即窗格。

Debug.Print strSQL
DoCmd.RunSQL strSQL


注意 前面的示例仅执行动作查询SQL,不适用于所示的某些早期示例SQL。 它仅旨在作为说明性示例。

翻译自: https://bytes.com/topic/access/insights/575414-quotes-double-quotes-where-when-use-them

t-sql 双引号 单引号