2011-09-06 99 views
0

我有一個名爲視圖VIEW_FORM_SALE_SUBMISSION_INFO如何使這個SQL查詢更加動態和線性?

我有查詢作爲

select a.FormSl 
from VIEW_FORM_SALE_SUBMISSION_INFO as a 
where FormSl between convert(int,'113990') and convert(int,'1131000') 

我的目標:

  1. 我想將convert()函數內部這兩個值作爲參數傳遞
  2. 我希望這個查詢更線性,也就是說,我可以使這些查詢更早一些到這個查詢,以便我可以在運算符之間使用,而不是像可能的那樣簡單è?
+0

爲什麼你需要'convert'?如果FormS1是一個int使用'在113990和1131000之間的FormS1'。 –

+0

@Mikael Eriksson:我需要轉換,因爲之間的比較不起作用,因爲我的兩個字符串是可變長度 – Pankouri

+0

對不起,我不明白。如果FormSl是'int',那麼你的參數應該是'int'。如果FormSl不是「int」,但是存儲了整數,則應將FormSl的數據類型更改爲「int」。如果在FormSl中有非整數值,那麼您的查詢將會出現轉換錯誤,因爲FormSl會隱式轉換爲整數。 –

回答

2

這個怎麼樣?

select a.FormSl 
from VIEW_FORM_SALE_SUBMISSION_INFO as a 
where FormSl between @param1 and @param2 

其中@param1@param2是整數參數?

1

要參數化這個,你可以創建一個表值函數。

CREATE FUNCTION myFunction (@lower_bound AS VARCHAR(32), @upper_bound AS VARCHAR(32)) 
RETURNS TABLE AS 
RETURN 
select a.FormSl 
from VIEW_FORM_SALE_SUBMISSION_INFO as a 
where FormSl between convert(int,@lower_bound) and convert(int,@upper_bound) 


SELECT * FROM dbo.myFunction('11111', '22222') 

在優化轉換方面,您所擁有的是最優的,因爲它會得到。

如果你想進一步改進它,不要傳入字符串,首先傳遞int整數。