| Author | Topic | 
                            
                                    | Blue_In_FaceStarting Member
 
 
                                        4 Posts | 
                                            
                                            |  Posted - 2009-06-30 : 06:10:54 
 |  
                                            | I'm trying to execute ALTER TABLE ADD column01 varchar(50) and after that insert data into this table. All of the code is inside stored procedure and since I have to add 2 columns I'm using cursor to create and execute dynamic sql 'alter table add '+@col+' varchar(50)' twice to add columns.Few lines after, when I try to insert or update recently added columns I got a message that there is no one of these new columns. But, when I skip insert or update and simply ends stored procedure with a simple seclect statement, output is empty table with two new columns.Is there any sp limitation regarding such issue? |  | 
       
                            
                       
                          
                            
                                    | X002548Not Just a Number
 
 
                                    15586 Posts |  | 
                            
                       
                          
                            
                                    | Blue_In_FaceStarting Member
 
 
                                    4 Posts | 
                                        
                                          |  Posted - 2009-06-30 : 16:24:22 
 |  
                                          | Well, I just want to add two or three columns to existing table and insert few rows into table with added columns. All of this logic should be placed into stored procedure. It is no problem to make it in t-sql batches separated with GO, it works perfect, but writing this in store procedure's body makes some trouble.I just don't understand why everything works fine if I avoid using of cursor, but this is the way I can add only one column. If I need more then one, I have to use cursor. |  
                                          |  |  | 
                            
                       
                          
                            
                                    | X002548Not Just a Number
 
 
                                    15586 Posts |  | 
                            
                       
                          
                            
                                    | Blue_In_FaceStarting Member
 
 
                                    4 Posts | 
                                        
                                          |  Posted - 2009-06-30 : 16:53:28 
 |  
                                          | Here is a part of code. CREATE PROCEDURE xTest 	AS	IF EXISTS (SELECT name FROM sysobjects WHERE  name = N'xTABLE' AND type = 'U')		DROP TABLE xTABLE	CREATE TABLE xTABLE(kol1 varchar(10),kol2 varchar(10))	IF EXISTS (SELECT name FROM tempdb..sysobjects WHERE  ID = OBJECT_ID('#T') AND type = 'U')		DROP TABLE #T	CREATE TABLE #T(k varchar(10))	INSERT INTO #T		SELECT 'kol3' UNION		SELECT 'kol4'		DECLARE @VAR varchar(200)	DECLARE @k varchar(10)		DECLARE C CURSOR FOR SELECT k FROM #T	OPEN C	FETCH NEXT FROM C INTO @k	WHILE(@@FETCH_STATUS=0)		BEGIN			SET @VAR='ALTER TABLE xTABLE ADD '+@k+' varchar(10)'			EXEC(@VAR)		FETCH NEXT FROM C INTO @k		END	CLOSE C	DEALLOCATE C		-- WITHOUT INSERT BELOW EVERYTHING WORKS FINE, WITH INSERT THERE IS AN ERROR	-- Insert Error: Column name or number of supplied values does not match table definition.	-- Or	-- Invalid column name 'kol3'.	INSERT INTO xTABLE(kol1,kol2,kol3,kol4) VALUES ('A','B','C','D')GO |  
                                          |  |  | 
                            
                       
                          
                            
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                    30421 Posts | 
                                        
                                          |  Posted - 2009-06-30 : 17:39:26 
 |  
                                          | Because at compilation time, xTABLE does not have those columns!Change the insert values to insert selectINSERT INTO xTABLE  select 'A','B','C','D' N 56°04'39.26"E 12°55'05.63"
 |  
                                          |  |  | 
                            
                       
                          
                            
                                    | Blue_In_FaceStarting Member
 
 
                                    4 Posts | 
                                        
                                          |  Posted - 2009-07-01 : 02:00:18 
 |  
                                          | It doesn't help, I've done it before, both of cases, ...VALUES('A',...) and SELECT 'A','B'... and output error is mostly the same. INSERT just can't find first added column. |  
                                          |  |  | 
                            
                       
                          
                            
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                    30421 Posts | 
                                        
                                          |  Posted - 2009-07-01 : 03:02:16 
 |  
                                          | It's because it's net there when the compile of procedure is made.Try to make the last insert statement dynamic too. That way, it's evaluated first at run time. N 56°04'39.26"E 12°55'05.63"
 |  
                                          |  |  | 
                            
                            
                                |  |