我试图用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
我怎样才能做到这一点?
答案 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