古い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
[古いスタイルのJOINを使用するバッドな習慣](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-古いスタイルのjoins.aspx) - 古いスタイルの*カンマで区切られたテーブルのリスト*スタイルが*適切な*スタイルに置き換えられました。 ANSI - ** 92 ** SQL標準(** 20年以上前**)のANSI 'JOIN'構文とその使用はお勧めしません –
また、変数を' char' * - あなたは**正確に1文字**の長さの変数を得ます - それはあなたが欲しい/必要とするものですか?そうでない場合は、 'varchar(n)'を使って 'n'文字までの文字列変数を定義してください!さらに、変数を 'char'として定義し、それに何かを割り当てる場合は、**一重引用符**を使用して文字列値を指定します:' set @ID = '5''。一重引用符がないと、**整数**の値になり、SQL Serverは変換を行う必要があります –
返信いただきありがとうございます。実際に悪い習慣は、いくつかのクエリでは左結合としてのみ使用し、この種のクエリでは結合を使用しません。私は改善しようとします。チャーについては、1文字(1〜6)しか必要ありません。 640kが誰にとっても十分だった時からの悪い習慣。そして私は一重引用符を忘れて、私は気づいた。 – Roman78