1

動的宣言を行うことは可能ですか?説明します:私はテーブルを持っていますCOLUMNAMES

ID|Name
 1|Country
 2|City
 3|District
 4|Neighbourhood

そのテーブルの各レコードについて、次のようなことをしたいと思います。

declare @i int = 1
declare @number int
set @number = (SELECT count(*) FROM COLUMNNAMES)

While @i <= @number
BEGIN
Execute ('Declare column' + @i +'varchar(25)')
Execute ('set column' + @i +' = (Select NAME from COLUMNAMES where id = ' + @i)
set @i = @i + 1
END

アイデアは、動的テーブルエイリアスを使用してSELECTステートメントを作成するために使用できる変数(文字列)のリストを取得することです。

 Execute ('Select SOMECOLUMN as ' + @columname +  @i +', ANOTHERCOLUMN as ' + @columname +  @i +', ATHIRDCOLUMN as ' + @columname +  @i + ' FROM SOMETABLE')

これはできますか?もしそうなら、どのように?

4

3 に答える 3

2

それぞれExecuteが異なるセッションとして機能します。

したがって、変数を宣言するには、すべてのコードが 1 つのExecute関数内にある必要があります。

于 2012-08-30T14:35:19.257 に答える
1

いいえ、このように変数を宣言することはできませんが、データが入力された一時テーブルを使用できます。

ここにいくつかの助けがありますが、それは完全な解決策ではなく、機能しない宣言の代わりに何ができるかというアイデアにすぎません:

    Create Table #ColumnNames(
        NAME varchar(64) 
    )
    While @i <= @number
    BEGIN
       INSERT INTO #ColumNames
       Select NAME from COLUMNAMES where id = @i
       set @i = @i + 1
    END
DECLARE @Columns varchar(max)
SET @Columns = ''
SElECT @Columns = @Columns + NAME + ', ' 
FROM #ColumNames
于 2012-08-30T14:32:48.230 に答える
0

これは完全な解決策ではなく、方向性です。以下のソリューションでエイリアスを取得する方法のように、何らかの方法で動的に値'SomeColumn'を取得する必要があります。

declare @i int = 1
declare @number INT
DECLARE @ColName VARCHAR(25)
DECLARE @SQL VARCHAR(4000)=''
DECLARE @ColumnsWithAlias VARCHAR(4000) = ''
set @number = (SELECT count(*) FROM COLUMNNAMES)

   While @i <= @number
  BEGIN

Select @ColName= NAME from COLUMNAMES where id =  @i)

SET @ColumnsWithAlias =@ColumnsWithAlias + 'SomeColumn'+ ' AS '+ @ColName + ' , '

   set @i = @i + 1
   END

   SET @SQL= 'SELECT '@ColumnsWithAlias+' FROM  TableName'

  EXECUTE(@SQL) 
于 2012-08-30T15:30:25.930 に答える