2009-12-02 11 views
7

テーブルの列のCol1、Col2に及びCOL3と「ABC」を考えると、自動的に次のようなものを生成することが可能である:プレフィックスは、すべての列

SELECT 
Col1 AS 'ABC_Col1', 
Col2 AS 'ABC_Col2', 
Col3 AS 'ABC_Col3' 
FROM ABC 

私は固定セットせずにテーブルを持っています私はまだ列プレフィックスが必要です(ユーザーがCol1、Col2などの名前の列を持つ他のテーブルのJOIN/CTEに必要です)

したがって、私はこのようなものを書くことができます:

SELECT 
T0.* AS 'ABC_T.*', 
FROM ABC T0 

もちろん、有効なSQLはありませんが、何とかして "*"列がすべて同じプレフィックスを得るようにできますか?

答えて

3

これは、あなたの古いカラム名と新しいカラム名のマップを提供します。私はまだそれで遊んでいる。

EDIT

OK、私はそれを不時着。

DECLARE @sql varchar(max) 
SET @sql = 'SELECT ' 

DECLARE @old_column_name varchar(50) 
DECLARE @getNext CURSOR 
SET @getNext = CURSOR FOR 
    SELECT syscolumns.name 
     FROM sysobjects 
      JOIN syscolumns ON sysobjects.id = syscolumns.id 
     WHERE sysobjects.name = 'ABC' 
OPEN @getNext 
FETCH NEXT FROM @getNext INTO @old_column_name 
WHILE @@fetch_status = 0 
BEGIN 

    --BUILD DYNAMIC SQL 
    SET @sql = @sql + @old_column_name + ' AS ''ABC_' + @old_column_name + ''', ' 

FETCH NEXT FROM @getNext INTO @old_column_name 
END 
CLOSE @getNext 
DEALLOCATE @getNext 

--REMOVE FINAL COMMA AND ADD TABLE 
SET @sql = SUBSTRING(@sql, 0, LEN(@sql)) + ' FROM ABC' 

exec(@sql) 

A)それはカーソルだから、これは(ひどいパフォーマンスです)

B)私はここの人々のために仕事をすることを意図していないけど、私は夢中になっ。

C)私はそれが投稿されていないと思っていました。私はそれがどれほど貧弱な答えなのかを考えていませんでした。

+0

努力してくれてありがとう..私はダイナミックなSQLとは別の方法があることを望んでいた(そして、私はこのルートに行くつもりはないと思われるので)... – RWJ

2

どのような列のエイリアスが混乱しているように思えますか? select欄にあるように、すでにのフィールドを選択するのはT0.*です。フィールドのエイリアスを行わずにクエリの後にこれらのフィールドを依然としてT0.<whatever>として参照することができます。フィールド名を完全フィールド名(T0.[My Users Suck And Make Really Long Field Names])で参照するだけで済みます。

EDIT:フィールドのプレフィックスをエイリアスで変更することはできません。名前は変更のみ可能です。フィールドのプレフィックスは、テーブルのエイリアスです。

+0

コメントしますか?私がここで言ったことは間違っています。 – Donnie

+0

@Donnie:誰かの戦術的なdownvotingの可能性があります –

+0

私はT0を知っています。*はToとして参照することができます。 がありますが、このサンプルは後でより進んだ結合と共通表式(CTE)で使用されることに言及します。その時、T0、T1、T2などがありますが、フィールドのいくつかは同じ列名を持ちます。結合では*は動作しますが、CTEでは同じ列名を2回使用することはできません。 – RWJ

0

私はあなたがこれを行うことができる唯一の方法は、いくつかの動的SQLを作成することだと思う。そこから

SELECT syscolumns.name as old_column_name, 'ABC_' + syscolumns.name as new_column_name 
    FROM sysobjects 
     JOIN syscolumns ON sysobjects.id = syscolumns.id 
    WHERE sysobjects.name = 'ABC' 
ORDER BY sysobjects.name,syscolumns.colid 

それだけでいくつかの動的SQLです:

関連する問題