| Author | Topic | 
                            
                                    | hezePosting Yak  Master
 
 
                                        192 Posts | 
                                            
                                            |  Posted - 2007-05-21 : 08:48:38 
 |  
                                            | hi, Im am wandering if  it is possible to create two views in two different tables from within the same stored proc:excreate proc myProcasuse [myDb1]gocreate view myV1asselect * from mytablegouse [myDb2]gocreate view myV2asselect * from mytablegogo---of course the go's are not allowed in a sproc, the create statement must be the first of a query batch and a vew can not have the databaase name preapended like when creating a table plus one can not use the "use" word in a proc, I tried using exec to bypass the "first statement in a batch" and go restrictions but have not been able to overcome the "use [myDb]" restriction, is there a way to solve this problem?thank you |  | 
       
                            
                       
                          
                            
                                    | spirit1Cybernetic Yak Master
 
 
                                    11752 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 08:57:00 
 |  
                                          | you can use dynamic sql and Exec()_______________________________________________Causing trouble since 1980blog: http://weblogs.sqlteam.com/mladenp |  
                                          |  |  | 
                            
                       
                          
                            
                                    | harsh_athalyeMaster Smack Fu Yak Hacker
 
 
                                    5581 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 08:57:15 
 |  
                                          | Prefix view with db name.Exec('Create View [myDb1].dbo.myv1as....')But why you want to create view inside a stored proc?Harsh AthalyeIndia."The IMPOSSIBLE is often UNTRIED" |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 09:18:51 
 |  
                                          | ha,spirit,thats what ive been trying to do butwhen i use exec and preapend the name of the database I get the following message:"'CREATE/ALTER VIEW' does not allow specifying the database name as a prefix to the object name."the stored procedure generates dimension tables for further use in analysis server, some are viewsthank you |  
                                          |  |  | 
                            
                       
                          
                            
                                    | spirit1Cybernetic Yak Master
 
 
                                    11752 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 09:40:20 
 |  
                                          | exec(' use yourDBName; go; create view ....')_______________________________________________Causing trouble since 1980blog: http://weblogs.sqlteam.com/mladenp |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 09:50:59 
 |  
                                          | spirit, I get the following message when using:exec(' use [myDb]; go; create view dimDates_1 as select * from [myDb].dbo.dimDates')--------Msg 102, Level 15, State 1, Line 1Incorrect syntax near 'go'.Msg 111, Level 15, State 1, Line 1'CREATE VIEW' must be the first statement in a query batch.-------thank you |  
                                          |  |  | 
                            
                       
                          
                            
                                    | rudesylePosting Yak  Master
 
 
                                    110 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 09:53:31 
 |  
                                          | This sounds crazy.  If you're doing it so you can query it a couple of times within the stored proc, then I'd think you'd be much better off inserting data into a table variable or temp table, and querying off of it.But then again, why not make the view a permanent object? |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 09:58:37 
 |  
                                          | its not a temp object rud. its a permanent object, I will use the views produced in analysis services, I could easily accomplish this by simply crating tables since they allow me to preapend the target database name, but I want these specifically to be views because they can all be derived easily from a single underlying table, thank you |  
                                          |  |  | 
                            
                       
                          
                            
                                    | khtanIn (Som, Ni, Yak)
 
 
                                    17689 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:01:08 
 |  
                                          | Since it is a permanent object can't you create the view before hand ? Must you do it in a stored procedure ? What if the stored procedure is run twice ? KH
 |  
                                          |  |  | 
                            
                       
                          
                            
                                    | sshelperPosting Yak  Master
 
 
                                    216 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:06:54 
 |  
                                          | Another work around to create a view on another database is to use the sp_executesql but with the database name included with it:EXEC myDb1..sp_executesql N'CREATE VIEW myView1 AS ...'SQL Server Helperhttp://www.sql-server-helper.com |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:08:19 
 |  
                                          | k, I could create beforehand but I want to reduce the number of steps in my overall script to the minimum, also I would like to wrap all my code into stored procedures, why should I need---create object myPermanentObjectcreate proc myProc doSomething...---when I can have--create proc myProc create object myPermanentObject; doSomething...------in this way, all my scripts reside in stored procedures so I can easily schedule them in a job, instead of having to write down sql code in the job scheduler or open the file everytime I need to run a scriptthank you |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:16:44 
 |  
                                          | ssh:thank you theEXEC myDb1..sp_executesql N'CREATE VIEW myView1 AS ...'worked!! problem solved |  
                                          |  |  | 
                            
                       
                          
                            
                                    | rudesylePosting Yak  Master
 
 
                                    110 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:23:12 
 |  
                                          | Sorry, but this kind of maintenance task should not reside in a stored proc.  You should keep in a .sql file.  The purpose of a stored proc is to encapsulate reusable code. |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2007-05-21 : 10:34:08 
 |  
                                          | Rude, when you say "should not", according to what standard? I agree in the reusability part but what about the handling and automation part, isnt it easier to schedule stored procedures than .sql files? also I can allways call this proc frfom a another proc in a simple way,  why do you think I should stick to your statement at all times?"this kind of maintenance task should not reside in a stored proc"thank you |  
                                          |  |  | 
                            
                       
                          
                            
                                    | WyldOneStarting Member
 
 
                                    4 Posts | 
                                        
                                          |  Posted - 2008-04-22 : 19:04:29 
 |  
                                          | Yes, you can.create proc someProc ()asbegindeclare @sql nvarchar(4000)declare @db sysnameselect @sb = '[myDb1]'select @sql = 'exec '+@db+'.dbo.sp_executesql(''create view myV1 as select * from mytable'' ) 'print( @sql )exec( @sql )select @sb = '[myDb2]'select @sql = 'exec '+@db+'.dbo.sp_executesql(''create view myV2 as select * from mytable'' ) 'print( @sql )exec( @sql )endgoAs to why I want to do this? Easy, I'm lazy when it some to creating several zillion objects by hand. I create one sp-* to do hold the code and have it create _IDENTICAL_ code in every database I wnat it to be in. I make one change run the sp_ and viola all the procedures are updated. I also use it to do the _endless_ amount of grants etc I need as well.Works for functions, stored procedures, bulkloads, etc.Nuff said. Enjoy   |  
                                          |  |  | 
                            
                       
                          
                            
                                    | madhivananPremature Yak Congratulator
 
 
                                    22864 Posts | 
                                        
                                          |  Posted - 2008-04-23 : 03:24:20 
 |  
                                          | In any case, read this fullywww,sommarskog.se/dynamic_sql.htmlMadhivananFailing to plan is Planning to fail |  
                                          |  |  | 
                            
                       
                          
                            
                                    | glinoffStarting Member
 
 
                                    3 Posts | 
                                        
                                          |  Posted - 2009-01-25 : 17:37:37 
 |  
                                          | I have found this thread very useful, and especially the reference to http://www.sommarskog.se/dynamic_sql.html.However, when I try to implement the solutions, I have one problem.  I can create views in a procedure using sp_executesql without paramters  With parameters, I get a syntax error at the "view" statement..Does anyone know why using parameters would make a difference?--gordon |  
                                          |  |  | 
                            
                       
                          
                            
                                    | hezePosting Yak  Master
 
 
                                    192 Posts | 
                                        
                                          |  Posted - 2009-01-25 : 23:28:21 
 |  
                                          | It shouldn't make a difference, please post your code. |  
                                          |  |  | 
                            
                       
                          
                            
                                    | visakh16Very Important crosS Applying yaK Herder
 
 
                                    52326 Posts | 
                                        
                                          |  Posted - 2009-01-26 : 08:38:51 
 |  
                                          | whats the purpose of creating view within procedure in first place? |  
                                          |  |  | 
                            
                       
                          
                            
                                    | glinoffStarting Member
 
 
                                    3 Posts | 
                                        
                                          |  Posted - 2009-01-26 : 09:42:25 
 |  
                                          | This is a reply to visakh16, because this issue seems to come up repeatedly.  Currently, the code that I'm using is rather complicated.  I will try to simplify it and then post it here.I use SQL extensively for querying databases for analytic purposes.  In general, I tend to avoid anything that is not reasonably transportable between databases or that interfere with optimization -- for example, stored procedures, and cursors.However, now I am trying to make some SQL code more generic, so I have to succumb to temptations. I have some code that performs a particular task; this task requires multiple queries and multiple temporary tables.  The generic code still needs to interface to data tables.  I want this interface to be as localized as possible so I can easily change it (or change it using parameters); hence the desire for views.For instance, I want to specify one of several columns as a dimension from the original data.  A view makes this easy:    CREATE VIEW dimview AS        SELECT column1 as dim        FROM usertable    ;The rest of my code can then use the column "dim1", as it performs merrily along.  Then, if I want to change the column being used, I just drop the view and define it again with another column.  Same thing if I want to change data tables or databases.  Note that the names of the columns themselves depend on the underlying data tables, so I cannot even use a case statement for specifying the dimensions.  The only method that I've found for solving this is to create a view within a stored procedure.  Then, that procedure and other procedures can access the data in the way I need it to be accessed.--gordon |  
                                          |  |  | 
                            
                       
                          
                            
                                    | visakh16Very Important crosS Applying yaK Herder
 
 
                                    52326 Posts | 
                                        
                                          |  Posted - 2009-01-26 : 10:06:23 
 |  
                                          | why cant you use derived tables instead? |  
                                          |  |  | 
                            
                            
                                | Next Page |