Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
h2sut
Starting Member
40 Posts |
Posted - 2007-12-27 : 10:09:05
|
| I have created this sp to and i cant figure out how to use the top 3 as a paramter. I want to be able to use any # like top1,2,3,4,5 etc. I not sure how to compose the syntax i have my sp below.set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author: <Author,,Name>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================ALTER PROCEDURE [dbo].[sp_moveBackupTables] @serverName varchar(50) --ParameterASBEGIN declare @tableName varchar(50) --Variable --Declare Cursor DECLARE backup_Cursor CURSOR FOR select name from adventureworksdw.dbo.sysobjects where name like 'MyUsers_backup_%' and xtype = 'U' and name not in(select top 3 name from adventureworksdw.dbo.sysobjects where name like 'MyUsers_backup_%' and xtype = 'U' order by name desc) OPEN backup_Cursor --Move to initial record in the cursor and set variable(s) to result values FETCH NEXT FROM backup_Cursor INTO @tableName --Loop through cursor records WHILE @@FETCH_STATUS = 0 BEGIN --dynamically build create table Declare @SQL varchar(2000) Set @SQL = 'CREATE TABLE ' + @serverName + '.dbo.' + @tableName + '( [Id] [numeric](18, 0) NOT NULL, [Field1] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [Field2] [numeric](18, 0) NOT NULL, [Field3] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Field4] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Field5] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, CONSTRAINT [PK_1' + @tableName + '] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]' EXEC(@SQL) --Insert values into new dynamically created table Declare @backupTableRecords varchar(1000) Set @backupTableRecords = 'Insert into ' + @serverName + '.dbo.' + @tableName + ' SELECT * FROM AdventureWorksDW.dbo.'+ @tableName exec(@backupTableRecords) --Drop old table Declare @dropTable varchar(200) set @dropTable = 'drop table adventureworksdw.dbo.' + @tableName exec(@dropTable) --Move to the next record in the Cursor and set variable(s) value(s) FETCH NEXT FROM backup_Cursor INTO @tableName END CLOSE backup_Cursor DEALLOCATE backup_CursorEND |
|
|
spirit1
Cybernetic Yak Master
11752 Posts |
Posted - 2007-12-27 : 10:26:48
|
| in ss2k5 you can use top(@n) in ss2k use set rowcount @n_______________________________________________Causing trouble since 1980blog: http://weblogs.sqlteam.com/mladenpSSMS Add-in that does a few things: www.ssmstoolspack.com <- new version out |
 |
|
|
madhivanan
Premature Yak Congratulator
22864 Posts |
Posted - 2007-12-28 : 01:26:01
|
| and whenever you use set rowcount @n dont forget to reset to 0 at the end pf the procedureMadhivananFailing to plan is Planning to fail |
 |
|
|
|
|
|
|
|