SQL copy table scheme – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SQL copy table scheme – MS SQL – Fórum – Programujte.comSQL copy table scheme – MS SQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
14. 8. 2012   #1
-
0
-

Ahoj všichni, poradíte mi prosím?

Programuji v c# a používám SQLCE

Potřebuji zkopírovat struktůru "tabulkaTest" a vytvořit prázdnou "tabulkaTest2" se stejnou struktůrou. Jde mi o to že když změním "tabulkaTest" tak ostatní tabulky se musejí vytvářet se stejnou struktůrou. Je to z důvodu pokud změním "tabulkaTest" abych nemusel stále na všech verzích programu měnit zdrojový kód. Víte někdo jak takový příkaz vypadá v SQLCE?

Nahlásit jako SPAM
IP: 82.208.25.–
http://www.davidrosko.gekoni.cz/
damra0
Duch
5. 10. 2012   #2
-
0
-

#1 David Roško
Pokud jde jen o tabulku bez indexu a klicu tak se da pouzit tohle:

SELECT *

INTO [tabulkaTest2]
FROM [dbo].[tabulkaTest] WHERE 0 = 1

Pokud jde i o identity, klice, indexy je to slozitejsi

Nahlásit jako SPAM
IP: 195.39.4.–
12. 2. 2013   #3
-
0
-

#1 David Roško
Tak tady je mé řešení, :) pro ostatní kteří by řešili stejný problém 

 public void CloneTable(string originalTable, string newTable)
        {
            DataTable ss = GetDataTable(originalTable);
            string tableString = GetCreateTableStatement(ss, newTable);
            Query(tableString);
        }

 public DataTable GetDataTable(string table)
        {
            var cmd = new SqlCeCommand("SELECT * FROM "+table, con);
            var dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            return dt;
        }

/// <summary>
        /// Genenerates a SQL CE compatible CREATE TABLE statement based on a schema obtained from
        /// a SqlDataReader or a SqlCeDataReader.
        /// </summary>
        /// <param name="tableName">The name of the table to be created.</param>
        /// <param name="schema">The schema returned from reader.GetSchemaTable().</param>
        /// <returns>The CREATE TABLE... Statement for the given schema.</returns>
        public string GetCreateTableStatement(DataTable table, string tableName)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(string.Format("CREATE TABLE [{0}] (", tableName));
            
            foreach (DataColumn col in table.Columns)
            {
                
                SqlDbType dbType = GetSqlDBTypeFromType(col.DataType);
                
                builder.Append("[");
                builder.Append(col.ColumnName);
                builder.Append("]");
                builder.Append(" ");
                builder.Append(GetSqlServerCETypeName(dbType, col.MaxLength));
                builder.Append(", ");
            }

            if (table.Columns.Count > 0) builder.Length = builder.Length - 2;

            builder.Append(")");
            return builder.ToString();
        }

   /// <summary>
        /// Gets the correct SqlDBType for a given .NET type. Useful for working with SQL CE.
        /// </summary>
        /// <param name="type">The .Net Type used to find the SqlDBType.</param>
        /// <returns>The correct SqlDbType for the .Net type passed in.</returns>
        public SqlDbType GetSqlDBTypeFromType(Type type)
        {
            TypeConverter tc = TypeDescriptor.GetConverter(typeof(DbType));
            if (/*tc.CanConvertFrom(type)*/ true)
            {
                DbType dbType = (DbType)tc.ConvertFrom(type.Name);
                // A cheat, but the parameter class knows how to map between DbType and SqlDBType.
                SqlCeParameter param = new SqlCeParameter();
                param.DbType = dbType;
                return param.SqlDbType; // The parameter class did the conversion for us!!
            }
            else
            {
                throw new Exception("Cannot get SqlDbType from: " + type.Name);
            }
        }

Použití například takto 

CloneTable("Tabulka1", "NovaTabulkaSStejnymScheme")
Nahlásit jako SPAM
IP: 147.228.209.–
http://www.davidrosko.gekoni.cz/
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Scheme — založil Jarda

C++ copy — založil Old Spice sahara

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý