簡體   English   中英

如何更改為SSRS報告執行的SQL

[英]How do I change the SQL executed for an SSRS report

我將SQL Server 2008R2與SSRS 2010一起使用。我正在測試使用if語句在兩個簡單SQL語句之一的執行之間進行切換的存儲過程。 我的最終目標是用存儲過程替換一些SSRS報告中嵌入的SQL,該存儲過程根據日期參數選擇要運行的語句。

我在SSMS中測試了該語句,它可以在語句之間切換,並且可以毫無問題地產生結果。 但是,在SSRS中,當我執行報告並測試第二條語句時,除了計算的文本列外,我的結果集為空。 如果我從SSRS查詢設計器運行相同的proc,則執行的語句之間的切換有效

誰能幫助我了解為什么在執行報告時該開關不起作用? 這是我正在使用的SQL:

begin
if @reportdate >='10/1/2014' goto convformat
if @reportdate <'10/1/2014' goto preconvformat
end

preconvformat:

SELECT TOP (1000) col1
    ,col2
    ,col3
    ,col4
    ,col5
    ,col6
    ,col7
    ,'t1' AS OriginalDataSource
FROM t1 AS arh WITH (NOLOCK)
LEFT JOIN t1a1 a WITH (NOLOCK)
    ON a.col1 = arh.col1
WHERE (arh.DateCreated < '1/1/2015')
and a.col2 = '12345678'

goto testend    

convformat:

SELECT TOP 1000 arcus.col1
    ,col2
    ,col3
    ,col4
    ,col5
    ,col6
    ,col7
    ,'t3' AS OriginalDataSource
FROM t3. rmrtrk WITH (NOLOCK)
LEFT JOIN t3t1 arcus WITH (NOLOCK)
    ON arcus.col1 = rmrtrk.col1

where customer_number = '12345678'

testend:

創建一個過程並使用ANSI日期格式比較通過的日期值。

還避免使用GOTO ,這在較大的代碼段中很難調試。 使用IF..ELSE構造。

CREATE PROCEDURE Test_Proc 
 @reportdate  DATE 
AS
BEGIN
  SET NOCOUNT ON;

  IF (@reportdate >= '20141001')  --<-- ANSI Date Format  YYYYMMDD
   BEGIN
     -- 1st Statement 
   END
  ELSE
   BEGIN
    -- 2nd Statement 
   END

END

我才意識到問題出在哪里。 最初,我將使用union語句,其中第二條語句已過濾並與第一條合並。

更改方法時,我忘記為第二條語句使用別名。 這就是SSRS結果集為空的原因。

阿里先生,謝謝您的貢獻。 我會根據您的反饋進行適當的更改。

暫無
暫無

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

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