2016-05-07 13 views
0

Ich versuche, eine einfache SQL-Abfrage schreiben einige Preise von einem etwas älteren SQL Server zu beheben 2000. Das Problem haben wir 6 verschiedene Preise und ich würde es zu machen, so dass ich muss nur einen Hausmeister wechseln, um dies zu erledigen.unter Verwendung von SQL-Variable in where-Klausel vor gleich

erklärte ich eine Variable als Zeichen an der Spitze und versuchte, diese Zeichen nach unten in die Erklärung zu bekommen. Dies funktioniert halb, für den Teil nach dem Gleichen. Der Code hier unten funktioniert. Aber ich muss die "dbo.dep_art.VB05" ändern. Die 5 in VB05 muss der @ ID entsprechen. Wenn ich also die @ID in 4 ändere, muss VB05 VB04 sein. Ich habe versucht, [email protected] und dbo.dep_art.VB0 & @ID, aber das hat nicht funktioniert. Versuche auch eine zweite Variable als nvarchar und setze sie als dbo.dep_art.VB05, aber das ging auch schief.

Bitte denken Sie daran: Es ist ein 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

schlagen Gebrauch [Schlechte Gewohnheiten zu treten: mit altem Stil JOIN] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits- to-kick-using-old-style-joins.aspx) - Diese alte * durch Kommas getrennte Liste von Tabellen * style wurde durch die * richtige * ersetzt ANSI 'JOIN' Syntax in der ANSI - ** 92 ** SQL Standard (** mehr als 20 Jahren ** vor) und seine Verwendung ist –

+0

auch entmutigt: Wenn Sie eine Variable als' char' * ohne * Angabe einer Länge definieren - dann bekommst du eine Variable von ** genau 1 Zeichen Länge ** - ist das was du willst/brauchst ?? Wenn nicht: Verwenden Sie 'varchar (n)', um eine String-Variable zu definieren, die bis zu 'n' Zeichen lang sein kann! Außerdem: Wenn Sie eine Variable als 'char' definieren und ihr etwas zuweisen wollen, verwenden Sie ** einfache Anführungszeichen **, um den Zeichenfolgenwert zu bezeichnen:' set @ID = '5''. Ohne die einfachen Anführungszeichen, dann ist es ein ** ** integer Wert und SQL Server wird eine Umwandlung –

+0

Danke für die Antwort zu tun hat. Schlechte Gewohnheiten in der Tat, nur verwendet Join als Linke Join in einigen Abfragen, verwendet nie Join in dieser Art von Abfrage. Ich werde versuchen, mich zu verbessern. Was das Char betrifft, brauche ich nur ein Zeichen (1 bis 6). Auch schlechte Angewohnheiten aus der Zeit, dass 640k für alle genug waren. Und ich habe die einfachen Zitate vergessen, bemerkte ich. – Roman78

Antwort

0

Wenn Sie nur 6 Optionen haben, und es wird weiter nicht entwickeln: Sie if ... else

I don verwenden können ‚t dynamisch sQL in Version 2000