0

SQL Server ストアド プロシージャ内で select ステートメントを生成したいと考えています。SQL パラメータに列名があります。

選択した列名を使用してプログラムで select ステートメントを生成しようとしていますが、ストアド プロシージャ内で正しい構文が見つからないようです。

CREATE PROCEDURE dbo.aProc
     @testCondition int,
     @colCount int,
     @column_1 varchar(100) = null,
     ....
    @column_40 varchar(100) null
AS
  DECLARE @qry nvarchar(3000)
  DECLARE @Iterator int

  SET @testtype = 2
  SET @Iterator = 0
  SET @qry  ='SELECT '

  WHILE (@Iterator < @colCount-1)
    BEGIN
        SET @qry = @qry + ''+@column_''+CAST(@Iterator as varchar(2))+',''
        Set @Iterator = @Iterator + 1
    END


  SET @qry = @qry + ''@column_+CAST(@colCount as varchar(2)) FROM aTable where aCol = @testCondition 
4

2 に答える 2

0
CREATE PROCEDURE dbo.aProc
    @tablename varchar(100),
     @testCondition int,
     @colCount int,
     @column_1 varchar(100) = '',
     ....
    @column_40 varchar(100) ''
AS
BEGIN
if object_id('tempdb..#t') is not null
drop table #t


select 
table_name
,column_name
into #t
from information_schema.columns
where table_name=@tablename
and column_name in 
(@column_1,@column_2,@column_3,@column_4,@column_5
.....
@column_36,@column_37,@column_38,@column_39,@column_40)

select 
  'select '+
  stuff((
    select ', ' + 'isnull('+t2.column_name+','''') as' +t2.column_name+CHAR(10)
    from #t t2
    where t2.table_name = #t.table_name
    for xml path (''))
,1,2,'')+' from ' +#t.table_name
from #t
group by #t.table_name

END

私はLOOPの大ファンではありません。実際、私はループ クエリが嫌いです。

于 2013-10-19T14:08:31.870 に答える