我正在嘗試在表上運行引數化 SELECT 查詢,其中日期等于我存盤在變數中的 @date 并且由于某種原因它不起作用:
DECLARE @date DATETIME;
set @date = '09/01/2022';
select * from dba.hello where datum = @date
這以我想要的方式作業,但是當我嘗試按如下方式對查詢進行引數化時:
declare @table_name nvarchar(255);
set @table_name = 'dba.hello';
DECLARE @date DATETIME;
set @date = '09/01/2022';
exec('select * from ' @table_name ' where datum = ' @date)
我收到此錯誤:決議錯誤行:1,列:58:'2022' 附近的語法不正確。
請問有人知道可能是什么問題嗎?
謝謝
uj5u.com熱心網友回復:
就像任何陳述句一樣,您需要對動態陳述句進行引數化。如果你這樣做,你就沒有問題。我還將您的架構和表名拆分為 2 個變數并安全地注入它們:
DECLARE @SchemaName sysname,
@TableName sysname;
SET @SchemaName = N'dba';
SET @TableName = N'Hello';
DECLARE @date datetime = '20220109'; --Should this not be a date is it's only a date?
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT * FROM ' QUOTENAME(@SchemaName) N'.' QUOTENAME(@TableName) N' WHERE datum = @date;';
EXEC sys.sp_executesql @SQL, N'@date datetime', @date;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341119.html
標籤:sql sql-server 日期 短信 sql参数化查询
