我有一个带有可用值的参数作为列名,我在sql查询中使用该参数
WHERE ((@ColumnName) BETWEEN (@StartDate) AND (@EndDate))
AND (schema.table.column_name LIKE (@Number))
当我尝试运行报告时,我得到一个无法从字符转换日期/时间
如果我删除@ColumnName参数,报表运行正常但我希望能够选择一列来搜索日期。
答案 0 :(得分:1)
如果你想动态传递列名,你需要使用一个存储过程来使用像这样的动态sql ....
CREATE PROCEDURE Get_Data
@ColumnName1 SYSNAME,
@ColumnName2 SYSNAME,
@StartDate DATETIME,
@EndDate DATETIME,
@Number VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'SELECT * FROM TableName'
+ N'WHERE ' + QUOTENAME(@ColumnName1) + N' BETWEEN @StartDate AND @EndDate '
+ N' AND ' + QUOTENAME(@ColumnName2) + N' LIKE ''@Number'' '
EXECUTE sp_executesql @SQL
,N'@StartDate DATETIME, @EndDate DATETIME, @Number VARCHAR(100)'
,@StartDate
,@EndDate
,@Number
END