2016-04-04 13 views
0

一時テーブルを埋めるために作成しようとしているストアドプロシージャがあります。しかし、私はいくつかの条件に基づいてデータを追加する際にいくつかのパスを作り、追加のフィールドをtempテーブルに追加してそれらの条件を取得する必要があります。select文を使用してテンポラリテーブルにカラムを追加する

私はこのようにアウトを開始:

select top 0 
into #mytable 
from UserTable 

この私が同じ列と種類を単にコピー基本構造を発見しました。それから私は、フィールドを追加する必要があります。

alter table #mytable ADD reasontype varchar 

のIは、テーブルを調べるで、いくつかのパスを作り、ここではそれらのいずれかです。

insert into #mytable 
select distinct a.*, 'Annual' 
from UserTable a 
where (a.EnrollmentDate < DATEADD(year, -1, getdate()) 

これは毎年見直しを必要とするものを選択することです。このプロシージャはエラーなしでコンパイルされますが、データテーブルを埋めるときに文字列またはバイナリデータが切り捨てられるというエラーが発生します。私は間違って何をしていますか?

+1

おそらく、varcharの長さを使用する必要があります。 ( 'Annual'は 'A'に切り詰められています) – Tibrogargan

+0

@Tibrogarganそれは答えです。あなたはそれを提出する必要があります:) –

答えて

1
alter table #mytable ADD reasontype varchar(max) 

それが動作する場合、「最大」または自分の価値観を切り捨てないであろう値を使用して...または長さは左用reasontype

例の最長値と一致するLEFTステートメントを使用しますか:

alter table #mytable ADD reasontype varchar(3) 


insert into #mytable 
select distinct a.*, LEFT('Annual',3) 
from UserTable a 
where (a.EnrollmentDate < DATEADD(year, -1, getdate()) 

しかし、あなたはおそらくこれが欲しい:

alter table #mytable ADD reasontype varchar(6) /* where 6 is the length of the string "Annual" */ 
0

があなたのvarchar型で長さを使用して、 " 「年次」は「A」に切り捨てられています。 reasontypeフィールドのインデックス作成を計画している場合は、varchar(max)を使用しないでください。インデックス可能なフィールドの最大幅を超えます。

関連する問題