简体   繁体   English

SQL Select * FROM 表,其中日期是动态的

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

I'm trying to run a parametrized SELECT query on a table, where date is equal to my @date stored in a variable and for some reason it does not work:我正在尝试在表上运行参数化 SELECT 查询,其中日期等于我存储在变量中的 @date 并且由于某种原因它不起作用:

DECLARE @date DATETIME;
set @date = '09/01/2022';

select * from dba.hello where datum = @date

This works the way that I want to, but when i try to parametrize the query as follows:这以我想要的方式工作,但是当我尝试按如下方式对查询进行参数化时:

 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)

I'm getting this error: Parse error at line: 1, column: 58: Incorrect syntax near '2022'.我收到此错误:解析错误行:1,列:58:'2022' 附近的语法不正确。

Does anyone know what could be the issue, please?请问有人知道可能是什么问题吗?

Thanks谢谢

You need to, just like any statement, parametrise your dynamic statement.就像任何语句一样,您需要对动态语句进行参数化。 If you do that, you have no problems.如果你这样做,你就没有问题。 I also split your schema and table names into 2 variables and safely inject them:我还将您的架构和表名拆分为 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