2016-05-18 19 views
0

如何在SQL Server中封裝SQL語句。如何在SQL Server中的語句之間封裝

我有很多重構的代碼有很長的列表where子句與相同的語句之間有幻數,我想重構它。可以封裝BETWEEN。

例子:查詢有類似這樣的事情並沒有加入這個只是一個基本的例子來說明,我想有在一些地方未重複BETWEEN

SELECT ... 
FROM Table0 
WHERE Id BETWEEN 3456 AND 15500; 

... 

SELECT ... 
FROM Table1 
WHERE Id BETWEEN 3456 AND 15500; 

... 
SELECT ... 
FROM Table2 
WHERE Id BETWEEN 3456 AND 15500; 
+0

你可以參考你的意思是由封裝在這方面?如果您不想連續重複使用相同的硬編碼值,請考慮將它們存儲在變量中,並在查詢中使用變量。這基本上可以讓你在一個區域內定義它們。 –

+0

我正在尋找的封裝可能是不可能的,因爲我想用Java和C#來組織代碼。如果if(IsValidId)的IsValid =>(x> 3456 && x <15500),我想要的效果與C#中的相同,如果(x> 3456 && x <15500)所以有一個WHERE IsValid。這種封裝,我正在尋找,但不知道,如果SQL允許這個想法。 – Devsined

回答

0

如果你願意,你可以做到這一點的功能。

create function dbo.isValid(val int) 
returns int 
as 
begin 
if val BETWEEN 3456 AND 15500 
    return 1 
return 0 
end 

和明顯的用法:

select * from table1 
where dbo.isValid(id) = 1 
0

的可能性您可以嘗試

SELECT * 
FROM 
(
    SELECT .... 
    FROM table1 
    UNION ALL 
    SELECT .... 
    FROM table2 
    UNION ALL 
    SELECT .... 
    FROM table3 
) 
WHERE Id BETWEEN 3456 AND 15500; 
1

正如@Rion說可以創建變量或使用分離式表

CREATE TABLE check_range 
    ("range_id" int, "begin" int, "end" int) 
; 

INSERT INTO check_range 
    ("range_id", "begin", "end") 
VALUES 
    (1, 3456, 15500) 
; 

然後將查詢應該是

SELECT ... 
FROM Table0 
CROSS JOIN check_range cr 
WHERE Id BETWEEN cr.begin AND cr.end; 
+0

這是一個有趣的解決方案,不是我正在尋找的東西,而是很好的替代方案 – Devsined

相關問題