Sql 计算字段,基于2个ID选择
我有一个表,名为FacilityDatabaseConnection,如下所示, ID、FacilityID、数据库类型ID、连接字符串 因此,给定FacilityID和DatabaseTypeID对,您将得到一个ConnectionString。 Facility表和DatabaseType表都有“Name”字段。 我想在FacilityDatabaseConnection中创建一个“Name”字段,以执行以下操作:Sql 计算字段,基于2个ID选择,sql,calculated-columns,Sql,Calculated Columns,我有一个表,名为FacilityDatabaseConnection,如下所示, ID、FacilityID、数据库类型ID、连接字符串 因此,给定FacilityID和DatabaseTypeID对,您将得到一个ConnectionString。 Facility表和DatabaseType表都有“Name”字段。 我想在FacilityDatabaseConnection中创建一个“Name”字段,以执行以下操作: SELECT (dbo.Facility.Name+' - '+dbo.Da
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,计算列无法引用其他表,因此您的建议不可能实现 另见
您应该改用视图/函数/存储过程。假设这是SQL Server,计算列不能引用其他表,因此您的建议是不可能的 另见
您应该改用视图/函数/存储过程。您可以执行以下操作
SELECT
(SELECT count(*) FROM table1) as new_column_name,
col1,
col2
FROM
table2
您可以执行以下操作
SELECT
(SELECT count(*) FROM table1) as new_column_name,
col1,
col2
FROM
table2
有一种秘密方法可以使计算列访问另一个表 即创建定义字段的用户定义函数。然后,UDF可以访问另一个表 alter语句类似于:
ALTER TABLE dbo.FacilityDatabaseConnection
ADD Name AS udf_getFacilityName(FacilityId);
有一种秘密方法可以使计算列访问另一个表 即创建定义字段的用户定义函数。然后,UDF可以访问另一个表 alter语句类似于:
ALTER TABLE dbo.FacilityDatabaseConnection
ADD Name AS udf_getFacilityName(FacilityId);
好吧,那就别提问题了。使用view/function/SP来实现这一点,与在我的程序中执行查询相比,与创建常规字段并手动将其命名相比,会有什么好处?我唯一能想到的是手动模式会占用更多空间,但速度更快,并允许使用其他命名模式(这取决于好坏)。老实说,我认为,在您将此查询确定为导致性能问题的瓶颈之前,您所做的一切都无关紧要。不过,我建议不要过早地对数据库进行非规范化(并添加一个额外的列,手动填充已有的数据),因为这会造成管理和数据完整性的噩梦。是的,我正在避免这样做。我们最初在那里有Name字段,直到我注意到我们只是为了这个目的才使用它,所以我删除了它,然后我想我可以做一个计算。老实说,虽然它看起来一点都不重要,但我认为最好的选择可能是不使用它,而是通过代码使用其他数据,而不是SQL。好吧,那就顺便问一下。使用view/function/SP来实现这一点,与在我的程序中执行查询相比,与创建常规字段并手动将其命名相比,会有什么好处?我唯一能想到的是手动模式会占用更多空间,但速度更快,并允许使用其他命名模式(这取决于好坏)。老实说,我认为,在您将此查询确定为导致性能问题的瓶颈之前,您所做的一切都无关紧要。不过,我建议不要过早地对数据库进行非规范化(并添加一个额外的列,手动填充已有的数据),因为这会造成管理和数据完整性的噩梦。是的,我正在避免这样做。我们最初在那里有Name字段,直到我注意到我们只是为了这个目的才使用它,所以我删除了它,然后我想我可以做一个计算。老实说,虽然它看起来一点都不重要,但我认为最好的选择可能是不使用它,通过代码而不是SQL使用其他数据。您必须使用视图来生成这样的派生视图。您必须使用视图来生成这样的派生视图。