2016-05-07 8 views
0

古いSQL Server 2000の価格を解決するために単純なSQLクエリを作成しようとしています。問題は6​​種類の価格があり、これを行うためには、看護師を1人だけ変更する必要があります。where節で変数を使用する前のSQL文

変数を一番上にcharとして宣言し、それらの文字をステートメントに入れようとしました。これは、平等の後の部分のために半分の作業です。下のコードは動作しています。しかし、私は "dbo.dep_art.VB05"を変更する必要があります。 VB05の5は@IDと等しくなければなりません。したがって、@ IDを4に変更すると、VB05はVB04でなければなりません。私は[email protected]とdbo.dep_art.VB0 & @IDを試しましたが、うまくいかなかったのです。また、2番目の変数をnvarcharとして試して、dbo.dep_art.VB05として設定しましたが、それも間違っていました。

覚えておいてください:それはあなたが唯一の6の選択肢を持っている場合はSQL Serverの2000

Declare @ID as char 
set @ID = 5 

/*.................*/ 

select distinct(dbo.dep_prs.ARTNR), 
    dbo.dep_art.Bezeichnung, 
    dbo.dep_prs.PR_Brutto 
from 
    dep_prs, dep_art 
where 
    dbo.dep_prs.ARTNR = dbo.dep_art.ARTNR 
    and dbo.dep_prs.Preisgruppe = 1 
    and dbo.dep_art.VB05 = 2 
    and dbo.dep_prs.LIdx = @ID 
    or dbo.dep_prs.ARTNR = dbo.dep_art.ARTNR 
    and dbo.dep_prs.Preisgruppe = 1 
    and dbo.dep_art.VB05 = 3 
    and dbo.dep_prs.LIdx = @ID 
order by 
    dbo.dep_prs.artnr 
+0

[古いスタイルのJOINを使用するバッドな習慣](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-古いスタイルのjoins.aspx) - 古いスタイルの*カンマで区切られたテーブルのリスト*スタイルが*適切な*スタイルに置き換えられました。 ANSI - ** 92 ** SQL標準(** 20年以上前**)のANSI 'JOIN'構文とその使用はお勧めしません –

+0

また、変数を' char' * - あなたは**正確に1文字**の長さの変数を得ます - それはあなたが欲しい/必要とするものですか?そうでない場合は、 'varchar(n)'を使って 'n'文字までの文字列変数を定義してください!さらに、変数を 'char'として定義し、それに何かを割り当てる場合は、**一重引用符**を使用して文字列値を指定します:' set @ID = '5''。一重引用符がないと、**整数**の値になり、SQL Serverは変換を行う必要があります –

+0

返信いただきありがとうございます。実際に悪い習慣は、いくつかのクエリでは左結合としてのみ使用し、この種のクエリでは結合を使用しません。私は改善しようとします。チャーについては、1文字(1〜6)しか必要ありません。 640kが誰にとっても十分だった時からの悪い習慣。そして私は一重引用符を忘れて、私は気づいた。 – Roman78

答えて

0

であり、それが遠くに開発しません: あなたがあれば使用することができます...他に

Iドン2000年版の動的SQLを使用することをお勧めします

関連する問題