SQL在查询中替换表达式

时间:2012-04-03 14:57:48

标签: sql sql-server

我试图用SQL Server中的表达式替换变量。

例如:

Declare @someString varchar(50)
set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
Select @someString * 29,@someString + 33,@someString /2 from Sales.SalesOrderDetail as s

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以这样做:

Declare @someString varchar(50)
DECLARE @query varchar(1000)

set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
set @query = 'Select (' + @someString + ') * 29,(' + @someString + ') 
             + 33,(' + @someString + ')/2 from Sales.SalesOrderDetail as s'

EXEC(@query)

但是你需要小心你要连接在一起,以避免SQL注入问题。

答案 1 :(得分:1)

我认为您需要使用动态SQL:

DECLARE @someString VARCHAR(50)
SET @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
DECLARE @SQL VARCHAR(MAX)
SET @SQL = 'SELECT ' + @SomeString + ' * 29, ' + 
                        @SomeString + ' + 33, ' + 
                        @SomeString + ' / 2 
            FROM    Sales.SalesorderDetail AS s'

EXEC (@SQL)

答案 2 :(得分:1)

来自评论

  

而不是在我的选择语句中使用冗长的组合(...)

您可以使用cross apply进行计算,并在计算中重复使用计算值。

select c.Value * 29,
       c.Value + 33,
       c.Value / 2
from Sales.SalesOrderDetail as s
  cross apply (select s.UnitPrice + s.UnitPriceDiscount + s.LineTotal) as c(Value)

答案 3 :(得分:0)

Declare @someString integer
set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
Select @someString * 29,@someString + 33,@someString /2 from Sales.SalesOrderDetail as s

OR

Declare @someString varchar(50)
set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
Select (@someString+'* 29') AS Col1,(@someString+'+ 33') AS Col2,(@someString+'/2') AS Col3 from Sales.SalesOrderDetail as s