sql >> データベース >  >> RDS >> Sqlserver

スクリプトを使用して一時テーブルの列とデータ型を自動的に生成する方法

    これはあなたの出発点になるかもしれません:

    DECLARE @viewname VARCHAR(50);
    SET @viewname ='tableorviewname';
    SELECT  c.name + ' '+ t.name + 
    case t.name  
    WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
    ELSE ',' 
    end
    FROM sys.columns c
    INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
    WHERE object_id = (SELECT object_id from sys.objects where name = @viewname)
    ORDER BY c.column_id
    

    編集:一時テーブル:

    一時テーブルは若干異なります。たとえば、SQL 2008 では #tv_source という名前の一時テーブルに対して機能します

    DECLARE @viewortablename VARCHAR(50);
    SET @viewortablename ='tempdb..#tv_source';
    SELECT  c.name + ' '+ t.name + 
    case t.name  
    WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
    ELSE ',' 
    end
    FROM tempdb.sys.columns c
    INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
    WHERE object_id =  object_id(@viewortablename)
    ORDER BY c.column_id
    

    注:これはコンマ区切りのリストを提供しますが、最後のコンマを削除しようとはしませんでした。リストのみを提供します。これを文字列に入れて操作したり、動的SQLなどとして使用したりする可能性があります。それでも、それはあなたがやりたいことへの出発点となるはずです.

    他の人に注意してください。SQL 2000 は、たとえば varchar(45) で長さを適切に表示しません。varchar 部分をリストするだけで、この質問のためにそれを作り直そうとはしませんでした。



    1. MySQLパスワードを作り直して、db:create on railsをレーキできるようにするにはどうすればよいですか?

    2. 特殊文字を含むOracleのトリガーを削除するにはどうすればよいですか?

    3. Oracle(+)演算子

    4. SQLの大文字と小文字を区別する文字列の比較