下面是我的數據庫的快照。計算列應該是字符串
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