假設我有一個有很多行和列(別名:bigtable)的表和一個總是有1行,但有多列(別名:1rowtable)的表。 lrowtable與bigtable無關,只是在那裏爲我的腳本使用的一些設置動態修改。所以我不能使用靜態SQLCMD變量,因爲我的腳本有GO語句,所以我不能使用正常變量。同時從兩個不相關的表中選擇
現在我想編寫一個訪問兩個表的select語句。
如果我做的:
SELECT ... FROM bigtable, 1rowtable
它一個CROSS JOIN,這樣是不好的,不能走這條路。
如果我用1rowtable的CTE,我有
SELECT field FROM 1rowtable
訪問其字段所以這是太糟糕。同樣的,像一個表值函數:
CREATE FUNCTION getSetting(@name nvarchar(40))
RETURNS TABLE
AS
RETURN (SELECT name FROM 1rowtable WHERE name = @name)
很明顯,我不能用一個標量函數,因爲在所有它只返回一個特定的數據類型,但設置有不同的數據類型。然而,顯然我想用它當然不用做'SELECT .. FROM dbo.getfieldfrom1rowtable(..)'東西,因爲我在查詢中經常使用1rowtable。
我也試圖做:
SELECT
(SELECT
<expression involving bigtable and 1rowtable>,
<expression involving bigtable and 1rowtable>,
<expression involving bigtable and 1rowtable>,
...
FROM 1rowtable)
FROM bigtable
但當然,子查詢不能超過一個項目,如果它不存在與開始...
所以,我應該怎麼辦選擇?看來我必須每次都繼續使用'SELECT .. FROM dbo.getfieldfrom1rowtable(..)'?只是好奇:)
PS。 ms sql server 2008r2