我試圖用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