sql server - T-SQL stored procedure - select just a few columns -
i have stored procedure selects columns table. need select few of them.
how assign variable select few columns table?
existing stored procedure code:
declare @databasename nvarchar(255) = n’adventureworksdw’ declare @schemaname nvarchar(255) = n’dbo’ declare @tablename nvarchar(255) = n’dimproduct’ begin set nocount on -- declare parameters internal query declare @sqlstring nvarchar(max) = n” declare @paramdefinition nvarchar(max) = n” declare @columnlist table ( columnid int identity(1,1) , columnname nvarchar(255) , columnmaxlength int , columnminlength int ) declare @columnmaxlength int declare @columnminlength int declare @columncount int = 0 declare @loopcounter int = 1 declare @columnname nvarchar(255) set @sqlstring = n’select column_name ‘ @databasename + n’.’ + n’information_schema.columns data_type in (”char”, ”nchar”, ”varchar”, ”nvarchar”) , table_schema = @schemaname , table_name = @tablename’ set @paramdefinition = n’@schemaname nvarchar(255), @tablename nvarchar(255)’ insert @columnlist (columnname) execute sp_executesql @sqlstring, @paramdefinition, @schemaname, @tablename select @columncount = count(*) @columnlist while (@loopcounter <= @columncount) begin select @columnname = columnname @columnlist columnid = @loopcounter set @sqlstring = n’select ‘ ‘@columnminlength = min(len(‘ + @columnname + ‘))’ ‘, @columnmaxlength = max(len(‘ + @columnname + ‘))’ ‘ ‘ @databasename + n’.’ + @schemaname + n’.’ + @tablename ‘ (nolock) ‘ set @paramdefinition = n’@columnminlength int output, @columnmaxlength int output’ execute sp_executesql @sqlstring, @paramdefinition, @columnminlength output, @columnmaxlength output update @columnlist set columnminlength = @columnminlength , columnmaxlength = @columnmaxlength columnid = @loopcounter set @loopcounter += 1 end select columnname [column name] , columnminlength [column minimum length] , columnmaxlength [column maximum length] @columnlist order [column name] end
you can build dynamic sql query , execute follows
create procedure select_mytable ( @fieldlist nvarchar(max) ) declare @select nvarchar(max) set @select = 'select ' + @fieldlist + ' mytable' exec sp_executesql @select go declare @fieldlist nvarchar(max) = 'username,region' exec select_mytable @fieldlist
Comments
Post a Comment