Instrução CREATE TABLE (Microsoft Access SQL)

Aplica-se ao: Access 2013, Office 2013

Cria uma nova tabela.

Observação

O mecanismo de banco de dados do Microsoft Access não oferece suporte ao uso de CREATE TABLE ou de qualquer uma das instruções DDL com bancos de dados de mecanismos de banco de dados que não são do Microsoft Access. Em vez disso, utilize os métodos DAO Criar.

Sintaxe

CREATE [TEMPORARY] Table (tipo field1 [(size)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [index1] [, tipo field2 [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT índicecomváriasids [, …]])

A instrução CREATE TABLE contém as seguintes partes:

Sair

Descrição

table

O nome da tabela a ser criada.

campo1, campo2

O nome do campo ou dos campos a serem criados na nova tabela. É necessário criar pelo menos um campo.

tipo

O tipo de dados do campo na nova tabela.

size

O tamanho do campo em caracteres (somente os campos Texto e Binário).

índice1, índice2

Uma cláusula CONSTRAINT definindo um índice de campo único. Para mais informações sobre como criar esse índice, consulte Cláusula CONSTRAINT.

índicedevárioscampos

Uma cláusula CONSTRAINT definindo um índice de vários campos. Para mais informações sobre como criar esse índice, consulte Cláusula CONSTRAINT.

Comentários

Use a instrução CREATE TABLE para definir uma nova tabela e seus campos e restrições de campo. Se NOT NULL for especificado para um campo, então será necessário que novos registros tenham dados válidos nesse campo.

Uma cláusula CONSTRAINT estabelece várias restrições sobre um campo e pode ser usada para estabelecer a chave primária. É possível também utilizar a instrução CREATE INDEX para criar uma chave primária ou índices extras em tabelas existentes.

Você pode usar NOT NULL em um único campo ou em uma cláusula nomeada CONSTRAINT que se aplica a um único campo ou a vários campos chamados CONSTRAINT. No entanto, é possível aplicar a restrição NOT NULL a um campo somente uma vez. A tentativa de aplicar esta restrição mais de uma vez resultará em um erro em tempo de execução.

Quando uma tabela TEMPORARY for criada, ela será visível somente na sessão em que for criada. Ela será excluída automaticamente quando a sessão for encerrada. As tabelas temporárias podem ser acessadas por mais de um usuário.

O atributo WITH COMPRESSION pode ser usado somente com os tipos de dados CHARACTER e MEMO (também conhecidos como TEXT) e seus sinônimos.

O atributo WITH COMPRESSION foi adicionado para as colunas de CHARACTER devido à alteração para o formato de representação de caracteres Unicode. Os caracteres Unicode exigem uniformemente dois bytes para cada caractere. Para os bancos de dados existentes do Microsoft Jet que contêm predominantemente dados de caracteres, isso pode significar que o arquivo de banco de dados poderá dobrar de tamanho quando for convertido para o formato do mecanismo de banco de dados do Microsoft Access. No entanto, a representação Unicode de vários conjuntos de caracteres, aqueles anteriormente indicados como Conjuntos de Caracteres de um Byte (SBCS), poderá ser facilmente compactada para um único byte. Se você definir uma coluna CHARACTER com esse atributo, os dados serão compactados automaticamente ao serem armazenados e descompactados quando recuperados da coluna.

As colunas Memorando também podem ser definidas para armazenar dados em formato compactado. No entanto, existe uma limitação. Somente as instâncias de colunas Memorando que tiverem 4096 bytes ou menos serão compactadas. Todas as outras instâncias de colunas Memorando permanecerão descompactadas. Isso significa que, dentro de uma determinada tabela, para uma determinada coluna Memorando, alguns dados podem ser compactados e outros não.

Exemplo

Este exemplo cria uma nova tabela chamada ThisTable com dois campos de texto.

    Sub CreateTableX1() 
     
        Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a table with two text fields. 
        dbs.Execute "CREATE TABLE ThisTable " _ 
            & "(FirstName CHAR, LastName CHAR);" 
     
        dbs.Close 
     
    End Sub 

Este exemplo cria uma nova tabela chamada Mytable com dois campos de texto, um campo Data/Hora e um índice exclusivo composto por todos os três campos.

    Sub CreateTableX2() 
     
        Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
     
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a table with three fields and a unique 
        ' index made up of all three fields. 
        dbs.Execute "CREATE TABLE MyTable " _ 
            & "(FirstName CHAR, LastName CHAR, " _ 
            & "DateOfBirth DATETIME, " _ 
            & "CONSTRAINT MyTableConstraint UNIQUE " _ 
            & "(FirstName, LastName, DateOfBirth));" 
     
        dbs.Close 
     
    End Sub

Este exemplo cria uma nova tabela com dois campos de texto e um campo Integer. O campo SSN é uma chave primária.

    Sub CreateTableX3() 
     
         Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a table with three fields and a primary 
        ' key. 
        dbs.Execute "CREATE TABLE NewTable " _ 
            & "(FirstName CHAR, LastName CHAR, " _ 
            & "SSN INTEGER CONSTRAINT MyFieldConstraint " _ 
            & "PRIMARY KEY);" 
     
        dbs.Close 
     
    End Sub

Este exemplo cria uma nova tabela chamada de ~~Kitsch'n Sync, que demonstra todos os diferentes tipos de campo e índice. O campo Numeração Automática é a chave primária.

    Sub CreateTableX6()
        On Error Resume Next
        Application.CurrentDb.Execute "Drop Table [~~Kitsch'n Sync];"
        On Error GoTo 0
        
        'This example uses ADODB instead of the DAO shown in the previous
        'ones because DAO does not support the DECIMAL and GUID data types
        Dim con As ADODB.Connection
        Set con = CurrentProject.Connection
        con.Execute "" _
            & "CREATE TABLE [~~Kitsch'n Sync](" _
                & " [Auto]                  COUNTER" _
                & ",[Byte]                  BYTE" _
                & ",[Integer]               SMALLINT" _
                & ",[Long]                  INTEGER" _
                & ",[Single]                REAL" _
                & ",[Double]                FLOAT" _
                & ",[Decimal]               DECIMAL(18,5)" _
                & ",[Currency]              MONEY" _
                & ",[ShortText]             VARCHAR" _
                & ",[LongText]              MEMO" _
                & ",[PlaceHolder1]          MEMO" _
                & ",[DateTime]              DATETIME" _
                & ",[YesNo]                 BIT" _
                & ",[OleObject]             IMAGE" _
                & ",[ReplicationID]         UNIQUEIDENTIFIER" _
                & ",[Required]              INTEGER NOT NULL" _
                & ",[Unicode Compression]   MEMO WITH COMP" _
                & ",[Indexed]               INTEGER" _
                & ",CONSTRAINT [PrimaryKey] PRIMARY KEY ([Auto])" _
                & ",CONSTRAINT [Unique Index] UNIQUE ([Byte],[Integer],[Long])" _
            & ");"
        con.Execute "CREATE INDEX [Single-Field Index] ON [~~Kitsch'n Sync]([Indexed]);"
        con.Execute "CREATE INDEX [Multi-Field Index] ON [~~Kitsch'n Sync]([Auto],[Required]);"
        con.Execute "CREATE INDEX [IgnoreNulls Index] ON [~~Kitsch'n Sync]([Single],[Double]) WITH IGNORE NULL;"
        con.Execute "CREATE UNIQUE INDEX [Combined Index] ON [~~Kitsch'n Sync]([ShortText],[LongText]) WITH IGNORE NULL;"
        Set con = Nothing
    
        'Add a Hyperlink Field
        Dim AllDefs As DAO.TableDefs, TblDef As DAO.TableDef, Fld As DAO.Field
        Set AllDefs = Application.CurrentDb.TableDefs
        Set TblDef = AllDefs("~~Kitsch'n Sync")
        Set Fld = TblDef.CreateField("Hyperlink", dbMemo)
        Fld.Attributes = dbHyperlinkField + dbVariableField
        Fld.OrdinalPosition = 10
        TblDef.Fields.Append Fld
        
        DoCmd.RunSQL "ALTER TABLE [~~Kitsch'n Sync] DROP COLUMN [PlaceHolder1];"
    End Sub