Adding column to temporary table with select statments

时间:2016-04-04 16:59:29

标签: c# sql-server

I have a stored procedure I'm trying to create to fill a temporary table. But I need to make several passes at adding data based upon some conditions and capture those conditions with an additional field added to the temp table.

I start out like this:

 select top 0 
 into #mytable
 from UserTable

This I have found simply copies the basic structure with the same columns and types. Then I need to add a field:

 alter table #mytable ADD reasontype varchar

The I make several passes at examining the table, here is one of them:

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

This is to select those that require an annual review. The procedure compiles without an error but when I try to fill a datatable I get the error that string or binary data would be truncated. What am I doing wrong?

2 个答案:

答案 0 :(得分:1)

    alter table #mytable ADD reasontype varchar(max)

If that works, either use "max" or a value that won't truncate your values...or use a LEFT statement where the length matches the longest value of reasontype

example for 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())

but you probably just want this:

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

答案 1 :(得分:0)

Use a length on your varchar, 'Annual' is being truncated to 'A'. If you're planning on indexing the reasontype field, don't use varchar(max), it exceeds the maximum width of an indexable field

相关问题