我试图用SQL Server中的表达式替换变量。SQL替换查询中的表达式
例如:
Declare @someString varchar(50)
set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
Select @someString * 29,@someString + 33,@someString /2 from Sales.SalesOrderDetail as s
我怎样才能做到这一点?
我试图用SQL Server中的表达式替换变量。SQL替换查询中的表达式
例如:
Declare @someString varchar(50)
set @someString = 's.UnitPrice + s.UnitPriceDiscount+s.LineTotal'
Select @someString * 29,@someString + 33,@someString /2 from Sales.SalesOrderDetail as s
我怎样才能做到这一点?
你可以做这样的事情:
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注入的问题。
我认为你需要使用动态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)
+1:虽然指示某人到'sp_executesql'允许参数化查询和最佳实践编码行为。 *(这里不需要,只是在延长运行中更好,因为你的意思是继续。)* – MatBailie 2012-04-03 15:15:59
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
选项1将字符串分配给INT。这甚至不可能。 – MatBailie 2012-04-03 15:12:15
从评论
而不是冗长的组合(...)在我的选择声明中
您可以使用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)
你想乘/加/与整数把你的字符串,或者只是想Concat的呢?如果你想做数学运算,然后将你的字符串数据类型改为整数... – Teja 2012-04-03 15:01:27
你是想要这样做,以减少键入(重用代码),或者你将有不同的公式在表达式中,并使用表达式作为查询的参数? '@ someString'从哪里来?谁做的? – 2012-04-03 15:05:51
除了下面的答案外,你应该将括号中的@ @string添加到括号中,否则你会得到一些相当有趣的结果。 – 2012-04-03 15:06:02