我有一个类似于这个的PostgreSQL函数:
CREATE OR REPLACE FUNCTION dbo.MyTestFunction(
_ID INT
)
RETURNS dbo.MyTable AS
$$
SELECT *,
(SELECT Name FROM dbo.MySecondTable WHERE RecordID = PersonID)
FROM dbo.MyTable
WHERE PersonID = _ID
$$ LANGUAGE SQL STABLE;
我真的不想用以下内容替换RETURNS dbo.MyTable AS:
RETURNS TABLE(
col1 INT,
col2 TEXT,
col3 BOOLEAN,
col4 TEXT
) AS
并列出MyTable的所有列和MySecondTable的名称。这是可以做到的吗?感谢。
- EDIT-- 为了澄清我必须返回MyTable中的所有列和MySecondTable中的1列。如果MyTable有> 15列,我不想列出RETURNS TABLE(col1 .. coln)中的所有列。
答案 0 :(得分:0)
您只需列出要在SQL语句的addAction($object)
部分中返回的列:
SELECT
现在您只需SELECT t1.column1, t1.column2,
(SELECT Name FROM dbo.MySecondTable WHERE RecordID = PersonID)
FROM dbo.MyTable t1
WHERE PersonID = _ID
,column1
,然后column3
返回
此外,您可能会在SQL语句的name
部分使用LEFT OUTER JOIN
找到更好的性能,而不是现在使用的相关子查询:
FROM
对SELECT t1.column1, t1.column2, t2.Name
FROM dbo.MyTable t1
LEFT OUTER JOIN dbo.MySecondTable t2 ON
t2.RecordID = t1.PersonID
WHERE PersonID = _ID
和RecordID
的来源进行了一些猜测,但这是一般的想法。