假设我有一个包含很多行和列的表(别名:bigtable),以及一个始终有 1 行但多列的表(别名:1rowtable)。1rowtable 与 bigtable 无关,它只是用于我的脚本使用的一些动态修改的设置。所以我不能为此使用静态 SQLCMD 变量,也不能为此使用普通变量,因为我的脚本有 GO 语句。
现在我想编写一个访问两个表的选择语句。
如果我做:
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。微软 sql 服务器 2008r2