1

具体的には Microsoft SQL Server 2008

私がやりたいことは次のとおりです。

  • Table1 : 3 列C1,C2,C3と任意の数の行
  • Table2 : 1列col3行まで

の各行にTable2C1C2またはが含まれますC3(重複なし)

私は何かをしたい

create view v1 on 
(
    select (select col from Table2) from Table1
)

したがって、 とTable2が含まれC1ている場合C2、作成されるビューには と が表示されますC1C2

Table2を追加して更新しC3、クエリを再実行すると、ビューに が表示されC1C2C3

4

4 に答える 4

1

それを行うビューを作成することはできません。

ただし、目的の結果を返す動的SQL(つまり、ストアドプロシージャ内)を作成できます。

 declare @s varchar(500)
 select @s = ''
 select @s = ', ' + col from table2

 declare @sql nvarchar(1000)

 select @sql = 'select ' + substring(@s, 2, len(@s)) + ' from table1'

 exec sp_executesql @sql
于 2012-08-24T08:28:28.283 に答える
1

解決策を見つけた

次の方法を使用しました。

create view v1 on (select C1,c2 from t2)カーソルを使用して各行を反復処理し、適切な文字列を形成することで、必要なステートメントを作成するストアド プロシージャを作成します。

この文字列を exec() で使用して、ビューを作成しました。

于 2012-08-24T10:45:33.127 に答える
0

これは不可能だと思います。

あなたが本当にそのようなことに参加したいのなら、私は2つの可能性を見ます:

  • 動的SQLを使用して、ビューを使用する直前にビューを作成します。ただし、ビューは他のユーザーにも表示されるため(他のバージョンが必要になる場合があります)、これは解決策ではない可能性があります。
  • 動的SQLを使用して一時テーブルを作成し、それを使用します。一時テーブルは現在の接続でのみ表示されます
于 2012-08-24T08:29:50.040 に答える
0

次のクエリを試してください

DECLARE @coll nvarchar(100)
DECLARE @query nvarchar(4000)
set @query = 'select '
DECLARE @colcursor CURSOR
SET @colcursor = CURSOR FOR
SELECT col
FROM Table2
OPEN @colcursor
FETCH NEXT
FROM @colcursor INTO @coll
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @coll
set @query = @query + @coll  + ','
FETCH NEXT
FROM @colcursor INTO @coll
END
CLOSE @colcursor
DEALLOCATE @colcursor
set @query = left(@query,(len(@query)-1)) + 'from Table1'
print @query
exec(@query)
于 2012-08-24T09:27:54.290 に答える