繁体   English   中英

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

[英]Calculated field, SELECT based on 2 IDs

我有一个表,名为FacilityDatabaseConnection,类似,ID,FacilityID,DatabaseTypeID,ConnectionString

因此,给定FacilityID和DatabaseTypeID对,您将获得一个ConnectionString。 设施表和数据库类型表都具有“名称”字段。 我想在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

这给了我一个错误“在此上下文中不允许子查询。仅允许标量表达式”。

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

假设这是SQL Server,则计算列不能引用其他表,因此您所建议的是不可能的。

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

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

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

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

alter语句类似于:

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

您可以执行以下操作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM