假设我有一个有很多行和列(别名: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