2010-05-27 5 views
1

Hey, j'essaie de mettre un peu de logique dans mon application C# qui va créer une table appelée Import, SI elle n'existe pas déjà ... voici mon code, cela ne semble pas fonctionner.C# SQL create table SI il n'existe pas déjà

con.Open(); 
        using (SqlCommand cmd = con.CreateCommand()) 
        { 
         cmd.CommandText = 
          @" 
         IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'RX_CMMData' AND TABLE_NAME = 'Import')) 
BEGIN 
CREATE TABLE Import (
    RowId  integer PRIMARY KEY NOT NULL, 
    PartNumber varchar(200) NOT NULL, 
    CMMNumber varchar(200) NOT NULL, 
    Date  varchar(200) NOT NULL, 
    FeatType varchar(200) NOT NULL, 
    FeatName varchar(200) NOT NULL, 
    Value  varchar(200) NOT NULL, 
    Actual  decimal, 
    Nominal  decimal, 
    Dev   decimal, 
    TolMin  decimal, 
    TolPlus  decimal, 
    OutOfTol decimal, 
    FileName varchar(200) NOT NULL 
); END"; 
         cmd.ExecuteNonQuery(); 
        } 
        con.Close(); 
+0

Quelle est l'erreur que vous obtenez? Cela ne se voit-il pas? – Tony

Répondre

3

La syntaxe de ce sous SQL Server 2005 est

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tablename]') AND type in (N'U')) 
BEGIN 
    -- create 
END 

Dans votre code, où est le mot-clé = FALSE ou NOT?

0

Certains DBMSes vous permettent de faire CREATE TABLE IF NOT EXISTS <tablename> dans le SQL. Je vérifierais la syntaxe de votre SGBD.

+1

Oracle permet de CREER OU DE REMPLACER –

+0

Si vous faites un CREATE OR REPLACE dans Oracle, est-ce que cela supprimera les données actuellement stockées dans la table, ou modifiera uniquement la définition de la table? Cela ne ressemble pas à la même chose. –

+0

Non - Si la table existe, les données seront correctes (à condition que vous n'effectuiez aucune modification qui affecterait les données, comme la suppression d'une colonne ou de quelque chose) –

9

Votre SQL crée la table si elle existe et non si elle ne l'est pas.

Modifier le SQL pour lire IF NOT EXISTS.

+3

+1 Bien repéré! –

+0

Encore ne fonctionne pas .. Une fois qu'il est créé, je lance l'application à nouveau et il échoue indiquant «table Import existe déjà. –

+0

Que voyez-vous si vous exécutez 'SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Importer''? (Voir la réponse d'Andomar) –

0

Si vous utilisez Oracle, vous pouvez essayer

select count(*) from user_tables 
where table_name = '' 

qui devrait vous dire si la table existe

2

Vous créez probablement la table dans le schéma par défaut (généralement dbo.)

Indiquez le nom complet, comme:

CREATE TABLE RX_CMMData.Import 
4

Vous c un regard également sur l'utilisation des objets Microsoft SMO. Je préfère travailler les objets SMO et les laisser faire le travail pour moi si possible au lieu d'exécuter du texte SQL à travers le code. À l'aide de l'objet Base de données SMO, vous pouvez effectuer les opérations suivantes:

Database db = myServer.Databases["MyDB"]; 

if (! db.Tables.Contains("NewTable")) 
{ 

    Table tbl = new Table(db, "NewTable"); 

    Column col1 = new Column(tbl, "Column1", DataType.Varchar(10)); 
    col1.Nullable = true; 
    tbl.Columns.Add(col1); 

    tbl.Create(); 

} 

http://www.mssqltips.com/tip.asp?tip=1826

+2

Différents traits et tout cela, mais je trouve qu'il est beaucoup plus facile d'écrire simplement le script SQL que nécessaire pour créer tous les objets et définir les propriétés comme dans votre exemple de code. –

Questions connexes