SQL Select * FROM table 其中日期是动态的
SQL Select * FROM table where date is dynamic
我正在尝试 运行 对 table 进行参数化 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”附近的语法不正确。
请问有人知道可能是什么问题吗?
谢谢
就像任何语句一样,您需要对动态语句进行参数化。如果你这样做,你就没有问题。我还将您的架构和 table 名称拆分为 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;
我正在尝试 运行 对 table 进行参数化 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”附近的语法不正确。
请问有人知道可能是什么问题吗?
谢谢
就像任何语句一样,您需要对动态语句进行参数化。如果你这样做,你就没有问题。我还将您的架构和 table 名称拆分为 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;