下面是我的数据库的快照。计算列应该是字符串
col1和col2都声明为int。
我ComputedColumn目前增加了1和2列,如下...
col1 col2 ComputedColumn
1 2 3
4 1 5
取而代之的是,我的ComputedColumn应该加入1和2列(includimg的- 在字符 ''中间)如下...
col1 col2 ComputedColumn
1 2 1-2
4 1 4-1
那么,什么是正确的语法?
下面是我的数据库的快照。计算列应该是字符串
col1和col2都声明为int。
我ComputedColumn目前增加了1和2列,如下...
col1 col2 ComputedColumn
1 2 3
4 1 5
取而代之的是,我的ComputedColumn应该加入1和2列(includimg的- 在字符 ''中间)如下...
col1 col2 ComputedColumn
1 2 1-2
4 1 4-1
那么,什么是正确的语法?
您可能将您的计算列定义为col1+col2
。改为尝试CAST(col1 AS NVARCHAR(MAX))+'-'+CAST(col2 AS NVARCHAR(MAX))
。
或者如果您愿意,您可以用NVARCHAR(10)
替换NVARCHAR(MAX)
或选择不同的长度。
简单:
SELECT ComputedColumn = convert(varchar, col1) + '-' + convert(varchar, col2)
FROM Table
create table TableName
(
col1 int,
col2 int,
ComputedColumn as Convert(varchar, col1) + '-' + Convert(varchar, col2)
)
记住,如果任一值是null
则ComputedColumn
结果也将null
(使用默认排序规则和设置)
SELECT col1, col2, (col1 + '-' + col2) as ComputedColumn
“ +“既是加法又是连接字符。你可以明确转换,但在这种情况下,包括中间的' - '应该会导致隐式转换。
在设计模式首先创建表
增加2列COL1和COL2
添加另一列computedcolumn和一套计算列属性
您也可以使用下面的脚本
CREATE TABLE [dbo].[tbl](
[col1] [varchar](50) NOT NULL,
[col2] [varchar](50) NOT NULL,
[ComputedColumn] AS ((CONVERT([varchar],[col1],(0))+'-')+CONVERT([varchar],[col2],(0)))
)
我觉得NVARCHAR(MAX)是矫枉过正的!,它们是INT,因此有一个最大长度,不能包含任何奇怪的Unicode字符!所以varchar(11)会很好。 – 2010-03-18 19:46:21
@KM好处,特别是在'VARCHAR'与'NVARCHAR'上。长度是一个小问题 - 只要行的总长度不超过允许的行大小(4K?),我相信在使用MAX和你建议的11之间没有实际区别。 – Dathan 2010-03-18 19:53:21
如果这是一个不是PERSISTED的计算列,那么您可能会执行此计算数百万次,具体取决于您在此列上执行多少个SELECT。我认为在(MAX)vs(n)列上进行字符串操作时会有一些开销。为什么抓住机会,int不能大于varchar(11)。 – 2010-03-19 12:09:52