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 双引号 单引号