【发布时间】:2015-10-25 15:50:57
【问题描述】:
我正在尝试构建一个 SQL 参数自动绑定到新查询的系统。根据这个线程:
SQL Server - Invalid characters in parameter names
应允许在标识符中使用@、_ 和# 字符。所以我尝试将参数构建为:
:表名#字段名
但是当我这样做时会出错:
PBdatabase.select_query: [1] DB[2] prepare() SELECT * FROM creative WHERE pk = :creature#pk [near "#pk": 语法错误]
它似乎不喜欢 # 字符,我尝试使用下划线,它似乎可以工作,但我已经在字段名称中使用了下划线。这就是我想使用不同字符的原因。
由于上面的线程谈到了 SQL 服务器,SQLITE 中的受限字符可能会有所不同。我找到了 SQLITE 受限关键字列表,但没有找到字符。
有人知道我还可以使用哪个特殊字符吗?
更新
有人想知道我有什么用处。这是一个示例,假设您有 2 个具有 1 对 N 关系的表:Fleet 包含船只。
您想要显示一个由 2 个块组成的表格,其中顶部显示 1 个当时选择的舰队。底部区块列出了舰队中的所有船只。
第一个块查询将类似于:
SELECT pk, number, location FROM fleet;
然后所选条目的字段将被放入具有以下名称的字段注册表中(假设 # 符号有效):
:fleet#pk
:fleet#number
:fleet#location
然后将运行第二个块的第二个查询,包括上面的注册字段。所以查询看起来像:
SELECT pk, fk_fleet, name FROM ship WHERE fk_fleet = :fleet#pk
此查询使用上述查询中的参数。标识符将替换为上一个查询中的值。这允许仅显示与上面所选舰队链接的船只,而不是所有可用的船只。
现在你们中的一些人可能会说我可以简单地保存我想要的变量并将它们作为参数传递给下一个查询。问题是所有查询都是从数据库加载的。我实际上不知道要运行哪个查询以及需要为另一个查询保存哪个值。相反,我将它们全部保存在注册表中,如果另一个 SQL 语句要求提供参数,则该值将可用。
【问题讨论】:
-
顺便说一句,我不明白你在做什么。您的绑定系统应该在实际评估查询之前发生,因此表达式的有效性应该无关紧要
-
lang_keyword 页面列表关键字,而不是字符。至于我想要做什么,它是允许查询之间的通信。我将使用示例更新帖子。
-
越来越好奇。什么是字段注册表?
标签: sqlite parameters special-characters bind identifier