2017-05-16 12 views
-1

私がしようとしているのは、SQLSystemから次の情報を抽出することです。 しかし、私の質問にパラメータを入れる方法については固執しています。SQLサーバーパラメータの問題

どのようにこれを行うに取り組みましたか?

パラメータ[Date From] DateTime、[Date To] DateTime、[Site Group] Text;

SELECT Contacts.Name, Points.M1_Code1, DataProfile.Date, DataProfile.[00:30], DataProfile.[01:00], DataProfile.[01:30], DataProfile.[02:00], DataProfile.[02:30], DataProfile.[03:00], DataProfile.[03:30], DataProfile.[04:00], DataProfile.[04:30], DataProfile.[05:00], DataProfile.[05:30], DataProfile.[06:00], DataProfile.[06:30], DataProfile.[07:00], DataProfile.[07:30], DataProfile.[08:00], DataProfile.[08:30], DataProfile.[09:00], DataProfile.[09:30], DataProfile.[10:00], DataProfile.[10:30], DataProfile.[11:00], DataProfile.[11:30], DataProfile.[12:00], DataProfile.[12:30], DataProfile.[13:00], DataProfile.[13:30], DataProfile.[14:00], DataProfile.[14:30], DataProfile.[15:00], DataProfile.[15:30], DataProfile.[16:00], DataProfile.[16:30], DataProfile.[17:00], DataProfile.[17:30], DataProfile.[18:00], DataProfile.[18:30], DataProfile.[19:00], DataProfile.[19:30], DataProfile.[20:00], DataProfile.[20:30], DataProfile.[21:00], DataProfile.[21:30], DataProfile.[22:00], DataProfile.[22:30], DataProfile.[23:00], DataProfile.[23:30], DataProfile.[24:00] 
    FROM (Lookup INNER JOIN Groups ON Lookup.Lookup_Id = Groups.Lookup_Id) INNER JOIN (Contacts INNER JOIN (Points INNER JOIN DataProfile ON Points.Id = DataProfile.Point_Id) ON Contacts.Id = Points.Contacts_Id) ON Groups.Link_Id = Contacts.Id 
    WHERE (((Lookup.Lookup_Name)=[Site Group]) AND ((DataProfile.Date) Between [Date From] And [Date To]) AND ((Points.Type)='Electricity') AND ((DataProfile.Type)=0)) 
    ORDER BY Contacts.Name, Points.M1_Code1, DataProfile.Date; 

答えて

0

本当にクエリの書式を調べる必要があります。そのテキストの壁は解読の悪夢であり、保守は恐ろしいものです。それはまた、恐ろしい結合構文が与えられているツールによって生成されるという独特な外観を持っています。また、テキストデータ型の使用を停止する必要があります。 varchar(max)の方が10年以上にわたって推奨されていません。そして、テキストを使用するには、どこの述語でもvarchar(max)に変換する必要があります。とにかくあなたの場合は、とにかくあなたが最大を必要としないことをお勧めします。確かに2GBを超える文字数を持つSiteGroup値はありませんか?おそらく25または50のような何かが過剰です。

コードはパラメータでフォーマットされています。エイリアスを使用することもお勧めしますが、それはまったく別のストアです。

declare @DateFrom datetime 
    , @DateTo datetime 
    , @SiteGroup varhcar(max) 

SELECT Contacts.Name 
    , Points.M1_Code1 
    , DataProfile.Date 
    , DataProfile.[00:30] 
    , DataProfile.[01:00] 
    , DataProfile.[01:30] 
    , DataProfile.[02:00] 
    , DataProfile.[02:30] 
    , DataProfile.[03:00] 
    , DataProfile.[03:30] 
    , DataProfile.[04:00] 
    , DataProfile.[04:30] 
    , DataProfile.[05:00] 
    , DataProfile.[05:30] 
    , DataProfile.[06:00] 
    , DataProfile.[06:30] 
    , DataProfile.[07:00] 
    , DataProfile.[07:30] 
    , DataProfile.[08:00] 
    , DataProfile.[08:30] 
    , DataProfile.[09:00] 
    , DataProfile.[09:30] 
    , DataProfile.[10:00] 
    , DataProfile.[10:30] 
    , DataProfile.[11:00] 
    , DataProfile.[11:30] 
    , DataProfile.[12:00] 
    , DataProfile.[12:30] 
    , DataProfile.[13:00] 
    , DataProfile.[13:30] 
    , DataProfile.[14:00] 
    , DataProfile.[14:30] 
    , DataProfile.[15:00] 
    , DataProfile.[15:30] 
    , DataProfile.[16:00] 
    , DataProfile.[16:30] 
    , DataProfile.[17:00] 
    , DataProfile.[17:30] 
    , DataProfile.[18:00] 
    , DataProfile.[18:30] 
    , DataProfile.[19:00] 
    , DataProfile.[19:30] 
    , DataProfile.[20:00] 
    , DataProfile.[20:30] 
    , DataProfile.[21:00] 
    , DataProfile.[21:30] 
    , DataProfile.[22:00] 
    , DataProfile.[22:30] 
    , DataProfile.[23:00] 
    , DataProfile.[23:30] 
    , DataProfile.[24:00] 
FROM Lookup 
INNER JOIN Groups ON Lookup.Lookup_Id = Groups.Lookup_Id 
INNER JOIN Contacts ON Groups.Link_Id = Contacts.Id 
INNER JOIN Points ON Contacts.Id = Points.Contacts_Id 
INNER JOIN DataProfile ON Points.Id = DataProfile.Point_Id 
WHERE Lookup.Lookup_Name = @SiteGroup 
    AND DataProfile.Date BETWEEN @DateFrom AND @DateTo 
    AND Points.Type = 'Electricity' 
    AND DataProfile.Type = 0 
ORDER BY Contacts.Name 
    , Points.M1_Code1 
    , DataProfile.Date;