全部,
我正在尝试找到正确的语法来执行以下操作:
SELECT a, b, c FROM foo WHERE foo.id = :id;
(上面的查询是用 SQLite 编写的)。
“正常”查询将被写为:
SELECT a, b, c FROM foo WHERE foo.id = ?;
第一个查询是使用命名参数编写的,第二个是未命名的。
Google 为我提供了存储过程和/或函数的语法,但我正在寻找的是SELECT
带有命名参数的查询。
蒂亚!
编辑:
第二种语法称为带有参数的查询,它使用?
. 因此,当我编写 C++ 代码时,我将使用 BindParameter() ODBC 语法。
但是对于第一个查询 n MS SQL Server,什么语法是正确的?我使用 SQLite 中使用的语法来进行带有命名参数的查询。我的问题是 SQL Server 的正确语法?
IIUC 从响应中正确的 SQL Server 语法是:
SELECT a, b, c FROM foo WHERE foo.id = @id;
这意味着我需要声明名为 id 的变量,将其绑定到准备好的查询,然后执行它。
要回答 Tibor 问题 - 不,该问题专门针对 SQL Server。数据库引擎不理解语法,我不确定如何正确编写查询。我的问题与客户端工具无关。
要回答 Charlieface 的问题 - 我使用的是普通SELECT...
查询,而不是存储过程或函数。如前所述 - 这就是谷歌搜索给我的。我正在寻找的是如何为 SQL Server 正确编写这样的查询(不是 sp 或 func),以便数据库引擎能够理解它。
编辑2:
因此,我的完整代码将如下所示(对于 SQL Server):
std::string query = "SELECT a, b, c FROM foo WHERE foo.id = @id;";
SQLExecute( stmt, "DECLARE @id" ... );
SQLPrepare( stmt, query.c_str()... );
SQLBindParameter();
SQLExecute();
因此,正如评论中所提到的,当您谈论一般查询时,而不是在函数或过程的上下文中,术语参数不存在 - 但也许您真正的意思是variable,对于您的目标来说也是一样的.
在这种情况下,要在 SQL Server (T-SQL) 语法中声明一个变量,您需要执行以下操作:
如果您选择在声明期间不设置变量,那么您可以稍后使用
SET
关键字将其设置为一个值,如下所示:然后,您可以在与查询相同的范围内使用该变量,如下所示:
完整的图片: