2016-05-07 73 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版本

相关问题