Sql-Server

SQL Server 查詢中的命名參數

  • January 5, 2022

全部,

我正在嘗試找到正確的語法來執行以下操作:

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...查詢,而不是儲存過程或函式。如前所述 - 這就是Google搜尋給我的。我正在尋找的是如何為 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) 語法中聲明一個變數,您需要執行以下操作:

-- @ denotes it's a variable, followed by the name of the variable, and then the type after, optionally followed by = and a value if you want to set the variable during declaration (but not required)
DECLARE @id INT = 123;

如果您選擇在聲明期間不設置變數,那麼您可以稍後使用SET關鍵字將其設置為一個值,如下所示:

SET @id = 123;

然後,您可以在與查詢相同的範圍內使用該變數,如下所示:

SELECT a, b, c FROM foo WHERE foo.id = @id;

完整的圖片:

DECLARE @id INT;
SET @id = 123;

SELECT a, b, c FROM foo WHERE foo.id = @id;

引用自:https://dba.stackexchange.com/questions/305639