我有一个名为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
这给了我一个错误“在这种情况下不允许使用子查询。只允许使用标量表达式。”
有没有办法实现这一点,或者这样的计算领域是不可能的?
答案 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