0

我有一个表,名为 FacilityDatabaseConnection,like-so,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

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

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

4

3 回答 3

2

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

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

您应该改用视图/函数/存储过程。

于 2013-08-01T17:56:22.337 回答
1

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

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

alter 语句类似于:

ALTER TABLE dbo.FacilityDatabaseConnection
    ADD Name AS udf_getFacilityName(FacilityId);
于 2013-08-01T18:09:39.197 回答
0

您可以执行以下操作

SELECT
    (SELECT count(*) FROM table1) as new_column_name,
    col1,
    col2
FROM
    table2
于 2013-08-01T17:59:21.293 回答