【发布时间】:2017-10-04 22:14:58
【问题描述】:
我有一个调用存储过程的 SSRS 报告。流程如下:
USE [TSC-Telaid]
GO
/****** Object: StoredProcedure [dbo].[TW_spRPTAllReceiverInventory] Script Date: 10/4/2017 2:06:58 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TW_spRPTAllReceiverInventory]
@SiteId varchar(50),
@ReceiverId int
AS
BEGIN
DECLARE @SQL varchar(8000), @Index int, @Value varchar(500), @Source varchar(100)
SELECT @Index = CHARINDEX('Initial Catalog=', ConnectionString) + 16, @Value = ConnectionString
FROM CustomerSetting
WHERE SiteId = @SiteId
SET @Source = '[' + SUBSTRING(@Value , @Index, CHARINDEX(';', @Value, @Index) - @Index) + ']'
SET @SQL = 'SELECT R.SiteId, L.*
FROM ' + @Source + '.[dbo].[vwReceiver] R JOIN ' +
@Source + '.[dbo].[vwInventory] L ON R.ReceiverId = L.ReceiverId
WHERE R.ReceiverId = ' + CAST(@ReceiverId as varchar)
EXEC(@SQL)
END
我在数据集上传入@SiteId 和@ReceiverID。我返回的字段之一是 DateReceived。我想过滤数据集,使其只返回 DateReceived = today() 但它不起作用。
我也尝试将过滤器表达式设置为 DateReceived BETWEEN DateAdd("d",-1,Today()) & DateAdd("d",1,Today())
我对 SQL 并不陌生,但对 SSRS 还是很陌生。
【问题讨论】:
-
这不是有效的语法。删除日期部分标识符 (
''d'') 周围的引号并将today()更改为getdate()。或者,您可以执行...where DateReceived >= cast(getdate() as date)之类的操作。这将为您提供从当前日期午夜开始的所有内容。 -
@Xedri OP 正在使用 SSRS 功能,因此
today有效。 @德鲁杰克逊。您的DateReceived列是否返回日期或日期时间? -
它返回一个日期时间
-
@Xedni 我在存储过程中尝试过,但由于我正在转换为日期(甚至是日期时间)并声明我必须转换为 varchar,因此出现错误。该演员无法从字符串转换为日期时间。
-
我的错。我认为这只是一个普通的旧存储过程。没有意识到这是有效的语法。
标签: sql sql-server reporting-services ssrs-2008 ssrs-tablix