我们数据库中的某些字段包含计算函数,例如
select lastname + ', ' + firstname as fullname from contact where contact.id =$contact$
查看字段时显示正确的数据(我假设这是因为当您打开记录时,执行计算)。但是,数据不会“存储”到字段中,因此在打开记录之前为空。是否可以将结果“存储”到字段中,从而可以搜索数据?
非常感谢詹姆斯
修改
我无法使用我们的软件创建computed_columns。
以上字段是文本字段,其中1)用户可以手动输入所需数据或2)数据库可以为您生成答案(但仅在您查看记录时)。我知道如果我运行以下内容:
Select * from contact where contact.id =$contact$ for xml auto
我只得到lastname, firstname
- 所以我知道fullname字段不会保留其信息。
答案 0 :(得分:0)
如果在sql server中使用计算列,则无论是否存储计算结果,该列都已可搜索。但是,如果您希望每次读取行时都不运行计算,则可以在“修改表”GUI中的行属性下更改该值。
答案 1 :(得分:0)
创建列
时使用PERSISTED
关键字
来自BOL:
坚持 指定SQL Server数据库引擎将物理存储表中的计算值,并在更新计算列所依赖的任何其他列时更新值。将计算列标记为PERSISTED可以在计算列上创建一个确定性但不精确的索引。有关更多信息,请参阅在计算列上创建索引。必须将用作分区表的分区列的任何计算列明确标记为PERSISTED。当指定PERSISTED时,computed_column_expression必须是确定性的。
答案 2 :(得分:0)
这不是计算列在SQL Server中的工作方式,因此我怀疑这是您的客户端应用程序正在执行的操作。在正确计算值时,您如何查看数据?在SSMS中查看数据时它是否有效?
查看http://msdn.microsoft.com/en-us/library/ms191250(v=SQL.90).aspx以了解如何正确创建计算列。
例如。
create table TestTable
(a int,
b int,
c as a + b)
insert into TestTable (a,b)
values (1,2)
select * from TestTable
where c = 3
此查询基于计算列,并返回已插入的行。
答案 3 :(得分:0)
当您使用CREATE TABLE时,您需要在列上使用PERSISTED选项。
CREATE TABLE test (col_a INT, col_b INT, col_c AS col_A * col_B PERSISTED)