2016-05-07 77 views
0

我想寫一個簡單的SQL查詢來解決一些舊的SQL Server 2000的價格。問題是我們有6個不同的價格,我會讓它,所以我只有改變一個看守才能完成這件事。SQL使用where子句中的變量之前等於

我在頂部聲明瞭一個變量爲char,並試圖將這些char變成聲明。這是工作的一半,對於平等之後的部分。這裏底部的代碼正在工作。但我需要更改「dbo.dep_art.VB05」。 VB05中的5必須等於@ID。因此,當我將@ID更改爲4時,VB05必須是VB04。我嘗試過[email protected]和dbo.dep_art.VB0 & @ID,但那沒有奏效。還嘗試了第二個變量作爲nvarchar並將其設置爲dbo.dep_art.VB05,但這也出錯了。

請記住:這是一個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- to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表*樣式列表被替換爲* proper *在ANSI - ** 92 ** SQL標準(**超過20年**之前)中使用ANSI'JOIN'語法,並且不鼓勵使用 –

+0

另外:如果將變量定義爲'char' *而不指定長度 - 然後你得到**正好1個字符的變量**長度 - 是你想要/需要的嗎?如果沒有:使用'varchar(n)'定義一個字符串變量,該變量可以長達'n'個字符!而且:如果你定義一個變量爲'char'並且你想給它賦值 - 使用**單引號**來表示字符串值:'set @ID ='5''。沒有單引號,它是一個** integer **值,並且SQL Server將必須執行轉換 –

+0

感謝您的答覆。確實存在不良習慣,只有在某些查詢中使用連接作爲左連接時,從不在這種查詢中使用連接。我會努力改進。至於字符,我只需要一個字符(1到6)。從640k時代開始,每個人都有不好的習慣。我注意到,我忘記了單引號。 – Roman78

回答

0

如果只有6個選項,它不會進一步發展: 如果你可以使用別的...

我不建議使用動態SQL在2000版本

相關問題