2011-10-19 16 views
1

私はTSQLに問題があります。私にはいくつかのテーブルがあり、それぞれのテーブルには異なる名前のフィールドが含まれています。テーブルの動的なフィールド数

すべてのレコードを読み込み、各レコードを文字列リストに管理する必要があります。各値はコンマで区切ります。そしてスムースを行う。この文字列で

私はCURSORSを使う必要があると思いますが、名前と型のフィールドの具体的な量を知らずにそれらを取り出すことはできません。たぶん私はフィールドの動的数でテーブル変数を作成することができますか?

ありがとうございます!

マカロフArtem。

答えて

1

から私は、INSERT文を生成するために書かれた多くのT-SQLスクリプトの1つを再利用します。彼らはあなたが必要とするものを正確に行います。すなわち

  1. リバースエンジニア
  2. は値
  3. の区切り文字列を生成し、列の名前とタイプを決定するために与えられたテーブル

私が見つけた最も完全な例はhere

しかし、単にされますGoogleの「INSERT STATEMENT GENERATOR」を簡単に検索すると、ニーズに合わせて再利用できるいくつかの例が得られます。

運が良かった!

+0

はい、私はそのようなことをしました、ありがとう! –

1
SELECT 
    ORDINAL_POSITION 
    ,COLUMN_NAME 
    ,DATA_TYPE 
    ,CHARACTER_MAXIMUM_LENGTH 
    ,IS_NULLABLE 
    ,COLUMN_DEFAULT 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_NAME = 'MYTABLE' 
ORDER BY 
    ORDINAL_POSITION ASC; 

http://weblogs.sqlteam.com/joew/archive/2008/04/27/60574.aspx

+0

Hm、面白いです。しかし、どのようにして "テーブル"変数を作成することができますか? –

+0

私は上記のクエリから結果セットを取得した後にテーブルを表現するために、アプリケーション内のオブジェクトを使用します。あなたが純粋なSQLでこれをしたいのであれば、私は有意義に答えるのに十分ではありません。 – bdares

+0

残念ながら、私は純粋なSQLのみを使用します。ありがとうございました! –

1

多分これで何かできます。

select T2.X.query('for $i in * 
        return concat(data($i), ",")' 
       ).value('.', 'nvarchar(max)') as C 
from (
     select * 
     from YourTable 
     for xml path('Row'),elements xsinil, type 
    ) as T1(X) 
    cross apply T1.X.nodes('/Row') T2(X)  

これはカラムCにカンマで区切られたYourTableの各値とYourTableであなたの各行に対して1つの行を与えます。

これは、テーブル全体のXMLを構築し、そのXMLを解析します。たくさんの行があるテーブルがあると困ってしまうかもしれません。

ところで:「純粋なSQLのみを使用できる」というコメントから分かりました。私は本当にこれが「純粋なSQL」とみなされるとは思わない)。

+0

ハ!ありがとう:)しかし、私はそれを理解することはできません:)私はすでにそれを行う..それは非常に難しかった:) –

関連する問題