计算字段,基于2个ID的SELECT

时间:2013-08-01 17:53:59

标签: sql calculated-columns

我有一个名为FacilityDatabaseConnection的表,就像这样, ID,FacilityID,DatabaseTypeID,ConnectionString

因此,给定FacilityID和DatabaseTypeID对,您将得到一个ConnectionString。 Facility和DatabaseType表都有“名称”字段。 我想在FacilityDatabaseConnection中创建一个“名称”字段来执行以下操作,

SELECT (dbo.Facility.Name+' - '+dbo.DatabaseType.Name) as Name
FROM dbo.FacilityDatabaseConnection
INNER JOIN dbo.Facility
 ON dbo.FacilityDatabaseConnection.FacilityID = dbo.Facility.ID
INNER JOIN dbo.DatabaseType
 ON dbo.FacilityDatabaseConnection.DatabaseTypeID = dbo.DatabaseType.ID

这样它返回“FacilityName - DatabaseType”

这可以作为查询,但是可以将其设为字段吗?


我试过了,

ALTER TABLE dbo.FacilityDatabaseConnection
ADD Name AS (SELECT (dbo.Facility.Name+' - '+dbo.DatabaseType.Name) as Name
FROM dbo.FacilityDatabaseConnection
INNER JOIN dbo.Facility
 ON dbo.FacilityDatabaseConnection.FacilityID = dbo.Facility.ID
INNER JOIN dbo.DatabaseType
 ON dbo.FacilityDatabaseConnection.DatabaseTypeID = dbo.DatabaseType.ID) PERSISTED

这给了我一个错误“在这种情况下不允许使用子查询。只允许使用标量表达式。”

有没有办法实现这一点,或者这样的计算领域是不可能的?

3 个答案:

答案 0 :(得分:2)

假设这是SQL Server,计算列不能引用其他表,所以你建议不可能。

另见http://msdn.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx

您应该使用视图/功能/存储过程。

答案 1 :(得分:1)

有一种秘密方法可以使计算列访问另一个表。

那就是创建一个定义字段的用户定义函数。然后,UDF可以访问另一个表。

alter语句如下所示:

ALTER TABLE dbo.FacilityDatabaseConnection
    ADD Name AS udf_getFacilityName(FacilityId);

答案 2 :(得分:0)

您可以执行以下操作

SELECT
    (SELECT count(*) FROM table1) as new_column_name,
    col1,
    col2
FROM
    table2