2015-11-19 51 views
0

我正在構建一個SQL報表,該報表具有多個最終將在SSRS中爲最終用戶設置的變量。對於我在SQL Server中的測試目的,我已經聲明瞭幾個變量,現在要使用SET語句來分配值。一些變量有一個特定的值分配給其他人,我只想使用通配符。我試過使用%'%',但我得到語法錯誤。我正在SQL Server 2008 R2中工作。如何在SET語句中使用通配符SQL Server 2008 R2

這裏是我DECLARESET聲明:

declare @start datetime 
declare @end datetime 
declare @Emp# varchar 
declare @Posn varchar 
declare @GL# varchar 
declare @HrType varchar 
declare @ProdCode varchar 
declare @WComp varchar 

set @start = '07/01/2015' 
set @end = '07/31/2015' 
set @Emp# = '068' 
set @Posn = % 
set @GL# = % 
set @HrType = % 
set @ProdCode = % 
set @WComp = % 

我是一個自學成才的新手,但我查看了所有的信息,我能找到的計算器和在谷歌。任何幫助,將不勝感激!

+0

[不良習慣踢:聲明VARCHAR沒有(長度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without -length.aspx) - 你應該**總是**爲你使用的任何'varchar'變量和參數提供一個長度 –

+0

注意到 - 謝謝! – user2611375

回答

0

如果您沒有要分配的值,請不要爲變量設置值SET

如果稍後在查詢中填充變量,則不需要初始值。

如果您想使用此參數捕獲所有值,那麼您做得不正確。

您可以將參數設置爲ALL。在這樣的查詢中使用您的參數:

SELECT * FROM TABLE 
WHERE (ProdCode = @ProdCode OR @ProdCode = 'ALL') 
+0

我的最終目標是在SSRS中,最終用戶將能夠打開此報告,選擇每個參數中的任何一個或多個或全部。示例:start = '10/01/2015',end = '10/31/2015',Posn = ALL,Emp#='068',GL#= ALL,HrType = All,ProdCode ='Productive Hrs Only', WComp - ALL。這個想法是一組非常強大的參數,可以像用戶所需的一樣寬泛或狹窄。 – user2611375

+0

我知道如何在SSRS中設置它。但問題是我想先在MS SQL Server Management Studios中測試SQL,所以我試圖複製某些人可能用來運行報表的條件。 – user2611375

+0

所以是答案我只是註釋掉任何參數,我不想在SQL中測試時將其設置爲特定值,而不用擔心通配符?並註釋WHERE子句行項目。 :) – user2611375

0

這是一個varchar。使用單引號像你總是會:

set @Posn = '%' 

然後你需要確保你使用LIKE代替=在你的比較。

如果這不起作用,您的問題就在別的地方。

+0

謝謝,但是當我使用單引號時,根本沒有結果。沒有錯誤,但也沒有結果。 – user2611375

+0

在顯示SELECT查詢之前無法提供幫助。 –

+0

我相信我過度思考這個問題。我選擇了在SQL中用於測試的任何WHERE語句和相關參數。感謝您的信息。 – user2611375