SQL Server 查詢中的命名參數
全部,
我正在嘗試找到正確的語法來執行以下操作:
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;