簡體   English   中英

SQL Select * FROM 表,其中日期是動態的

[英]SQL Select * FROM table where date is dynamic

我正在嘗試在表上運行參數化 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' 附近的語法不正確。

請問有人知道可能是什么問題嗎?

謝謝

就像任何語句一樣,您需要對動態語句進行參數化。 如果你這樣做,你就沒有問題。 我還將您的架構和表名拆分為 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM