terça-feira, 13 de março de 2012

Como fazer Insert no SQL Server


Insert (Transact-SQL)
Adiciona uma ou mais linhas a uma tabela ou exibição no SQL Server.

(T-SQL)
-- Standard INSERT syntax
[ WITH <common_table_expression> [ ,...n ] ]
INSERT
{
        [ TOP (expression) [ PERCENT ] ]
        [ INTO ]
        { <object> | rowset_function_limited
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ] }
    {
        [ (column_list) ]
        [ <OUTPUT Clause> ]
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
          | derived_table
          | execute_statement
          | <dml_table_source>
          | DEFAULT VALUES
        }
    }
}
[; ]

Argumentos
WITH <common_table_expression>
Especifica o conjunto de resultados nomeado temporário, também conhecido como expressão de tabela comum, definido dentro do escopo da instrução INSERT. O conjunto de resultados é derivado de uma instrução SELECT.
Também podem ser usadas expressões de tabela comuns com as instruções SELECT, DELETE, UPDATE, MERGE e CREATE VIEW. Para obter mais informações, consulte WITH common_table_expression (Transact-SQL).
TOP (expression) [ PERCENT ]
Especifica o número ou porcentagem de linhas aleatórias que serão inseridas. expression pode ser um número ou uma porcentagem de linhas. As linhas referenciadas na expressão TOP que são usadas com INSERT, UPDATE ou DELETE não são organizadas em nenhuma ordem.
São necessários parênteses delimitando expression em TOP nas instruções INSERT, UPDATE e DELETE. Para obter mais informações, consulte TOP (Transact-SQL).
INTO
É uma palavra-chave opcional que pode ser usada entre INSERT e a tabela de destino.
server_name
É o nome do servidor vinculado no qual a tabela ou exibição está localizada. server_name pode ser especificado como um nome de servidor vinculado ou usando-se a função OPENDATASOURCE.
Quando server_name é especificado como um servidor vinculado, database_name e schema_name são necessários. Quando server_name é especificado com OPENDATASOURCE, database_name eschema_name podem não se aplicar a todas as fontes de dados e podem estar sujeitos aos recursos do provedor OLE DB que acessa o objeto remoto. Para obter mais informações, consulte Consultas distribuídas.
database_name
É o nome do banco de dados.
schema_name
É o nome do esquema ao qual a tabela ou exibição pertence.
table_or view_name
É o nome da tabela ou exibição que irá receber os dados.
Uma variável table, dentro de seu escopo, pode ser usada como uma origem de tabela em uma instrução INSERT.
A exibição referida por table_or_view_name deve ser atualizável e fazer referência exata a uma tabela base na cláusula FROM da exibição. Por exemplo, um INSERT em uma exibição de várias tabelas deve usar um column_list que faça referência apenas a colunas de uma tabela base. Para obter mais informações sobre exibições atualizáveis, consulte CREATE VIEW (Transact-SQL).
rowset_function_limited
É a função OPENQUERY ou OPENROWSET. O uso destas funções está sujeito aos recursos do provedor OLE DB que acessa o objeto remoto. Para obter mais informações, consulte Consultas distribuídas.
WITH ( <table_hint_limited> [... n ] )
Especifica uma ou mais dicas de tabela permitidas para uma tabela de destino. A palavra-chave WITH e os parênteses são necessários.
READPAST, NOLOCK e READUNCOMMITTED não são permitidos. Para obter mais informações sobre dicas de tabela, consulte Dicas de tabela (Transact-SQL).
(column_list)
É uma lista de uma ou mais colunas nas quais inserir dados. column_list deve ser incluída entre parênteses e estar delimitada por vírgulas.
Se uma coluna não estiver na column_list, o Mecanismo de Banco de Dados deve ser capaz de fornecer um valor baseado na definição da coluna. Caso contrário, a linha não poderá ser carregada. O Mecanismo de Banco de Dados fornece um valor automaticamente para a coluna se a coluna:
·         Tiver uma propriedade IDENTITY. O próximo valor de identidade incremental for usado.
·         Tiver um padrão. O valor padrão da coluna será usado.
·         Tiver um tipo de dados timestamp. O valor do carimbo de data/hora atual será usado.
·         Permitir valor nulo. Um valor nulo será usado.
·         For uma coluna computada. O valor calculado será usado.
column_list e uma lista de valores devem ser usados quando valores explícitos são inseridos em uma coluna de identidades e a opção SET IDENTITY_INSERT deve estar definida como ON para a tabela.
Cláusula OUTPUT
Retorna linhas inseridas como parte da operação de inserção. Os resultados podem ser retornados ao aplicativo de processamento ou inseridos em uma tabela ou variável de tabela para processamento futuro.
cláusula OUTPUT não tem suporte em instruções DML que fazem referência a exibições particionadas locais, exibições particionadas distribuídas ou tabelas remotas, ou instruções INSERT que contêm umexecute_statement. A cláusula OUTPUT INTO não é suportada em instruções INSERT que contenham uma cláusula <dml_table_source>.
VALUES
Apresenta a(s) lista(s) de valores de dados a serem inseridos. Deve haver valores de dados para cada coluna em column_list, se especificada, ou na tabela. A lista de valores deve ser incluída entre parênteses.
Se os valores na lista não estiverem na mesma ordem que as colunas na tabela ou se não tiverem um valor para cada coluna da tabela, column_list deverá ser usado para especificar explicitamente a coluna que armazena cada valor de entrada.
É possível usar o construtor de linhas do Transact-SQL (também chamado construtor de valor de tabela) para especificar várias linhas em uma única instrução INSERT. O construtor de linhas consiste em uma única cláusula VALUES com várias listas de valores entre parênteses e separados por uma vírgula. Para obter mais informações, consulte Construtor de valor de tabela (Transact-SQL).
DEFAULT
Força o Mecanismo de Banco de Dados a carregar o valor padrão definido para uma coluna. Se não existir um padrão para a coluna e a coluna aceitar valores nulos, NULL será inserido. Para uma coluna definida com o tipo de dados timestamp, o próximo valor do carimbo de data/hora será inserido. DEFAULT não é válido para uma coluna de identidade.
expression
É uma constante, uma variável ou uma expressão. A expressão não pode conter uma instrução EXECUTE.
Ao fazer referência a tipos de dados de caracteres Unicode ncharnvarchar e ntext, 'expression' deve ter a letra maiúscula 'N' como prefixo. Se 'N' não for especificado, o SQL Server irá converter a cadeia de caracteres na página de código correspondente ao agrupamento padrão do banco de dados ou coluna. Qualquer caractere não localizado nessa página de código será perdido. Para obter mais informações, consulte Programação do lado do servidor com Unicode.
derived_table
É qualquer instrução SELECT válida que retorne linhas de dados a serem carregadas na tabela. A instrução SELECT não pode conter uma CTE (expressão de tabela comum).
execute_statement
É qualquer instrução EXECUTE que retorne dados com instruções SELECT ou READTEXT.
Se execute_statement for usado com INSERT, cada conjunto de resultados deverá ser compatível com as colunas da tabela ou da column_list.
execute_statement pode ser usado para executar procedimentos armazenados no mesmo servidor ou em um servidor remoto. O procedimento no servidor remoto é executado e os conjuntos de resultados são retornados ao servidor local e carregados na tabela no servidor local. Em uma transação distribuída, execute_statement não pode ser emitido em um servidor vinculado de auto-retorno quando a conexão tem vários conjuntos de resultados ativos (MARS) habilitados.
Se execute_statement retornar dados com a instrução READTEXT, cada instrução READTEXT poderá retornar um máximo de 1 MB (1024 KB) de dados. execute_statement também pode ser usado com procedimentos estendidos. execute_statement insere os dados retornados pelo thread principal do procedimento estendido. No entanto, saídas de threads diferentes do thread principal não são inseridas.
Você não pode especificar um parâmetro avaliado por tabela como o destino de uma instrução INSERT EXEC; porém, ele pode ser especificado como uma origem na cadeia de caracteres INSERT EXEC ou procedimento armazenado. Para obter mais informações, consulte Parâmetros com valor de tabela (Mecanismo de Banco de Dados).
<dml_table_source>
Especifica que as linhas inseridas na tabela de destino são as retornadas pela cláusula OUTPUT de uma instrução INSERT, UPDATE, DELETE ou MERGE, opcionalmente filtradas por uma cláusula WHERE. Se <dml_table_source> estiver especificado, o destino da instrução INSERT externa deverá atender às seguintes restrições:
·         Deve ser uma tabela base, não uma exibição.
·         Não pode ser uma tabela remota.
·         Não pode ter gatilhos definidos.
·         Não pode participar de relações de chave primária/chave estrangeira.
·         Ele não pode participar de replicação de mesclagem ou de assinaturas atualizáveis para replicação transacional.
O nível de compatibilidade do banco de dados deve ser definido como 100 ou superior. Para obter mais informações, consulte cláusula OUTPUT (Transact-SQL).
<select_list>
É uma lista separada por vírgulas que especifica quais colunas retornadas pela cláusula OUTPUT devem ser inseridas. As colunas de <select_list> devem ser compatíveis com as colunas nas quais os valores serão inseridos. <select_list> não pode fazer referência a funções de agregação ou a TEXTPTR.
<dml_statement_with_output_clause>
É uma instrução INSERT, UPDATE, DELETE ou MERGE válida que retorna linhas afetadas em uma cláusula OUTPUT. A instrução não pode conter uma cláusula WITH nem pode ter como destino tabelas remotas ou exibições particionadas. Se UPDATE ou DELETE for especificada, ela não poderá ser uma instrução UPDATE ou DELETE baseada em cursor. Linhas de origem não podem ser referenciadas como instruções DML aninhadas.
WHERE <search_condition>
É qualquer cláusula WHERE que contém uma <search_condition> válida que filtra as linhas retornadas por <dml_statement_with_output_clause>. Para obter mais informações, consulte Critério de pesquisa (Transact-SQL). Quando usada nesse contexto, <search_condition> não pode conter subconsultas, funções escalares definidas pelo usuário que executam acesso a dados, funções agregadas, TEXTPTR, nem predicados de pesquisa de texto completo.
DEFAULT VALUES
Força a nova linha a conter os valores padrão definidos para cada coluna.
BULK
Usado por ferramentas externas para carregar um fluxo de dados binários. Esta opção não é dirigida para uso com ferramentas como SQL Server Management Studio, SQLCMD, OSQL ou interfaces de programação de aplicativo de acesso a dados, como o SQL Server Native Client.
FIRE_TRIGGERS
Especifica que qualquer gatilho de inserção definido na tabela de destino seja executado durante a operação de carregamento de fluxo de dados binários. Para obter mais informações, consulte BULK INSERT (Transact-SQL).
CHECK_CONSTRAINTS
Especifica que todas as restrições na tabela ou exibição de destino devem ser verificadas durante a operação de carregamento de fluxo de dados binários. Para obter mais informações, consulte BULK INSERT (Transact-SQL).
KEEPNULLS
Especifica que as colunas vazias devem reter um valor nulo durante a operação de carregamento de fluxo de dados binários. Para obter mais informações, consulte Mantendo valores nulos ou usando valores padrão durante a importação em massa.
KILOBYTES_PER_BATCH = kilobytes_per_batch
Especifica o número aproximado de kilobytes (KB) de dados por lote como kilobytes_per_batch. Para obter mais informações, consulte BULK INSERT (Transact-SQL).
ROWS_PER_BATCH =rows_per_batch
Indica o número aproximado de linhas de dados no fluxo de dados binários. Para obter mais informações, consulte BULK INSERT (Transact-SQL).
Observação Um erro de sintaxe será gerado se uma lista de colunas não for fornecida.
Exemplo Sintaxe SQL Server
USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure
VALUES (N'FT', N'Feet', '20080414');
GO

USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure
VALUES (N'FT2', N'Square Feet ', '20080923'), (N'Y', N'Yards', '20080923'), (N'Y3', N'Cubic Yards', '20080923');
GO

USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure (Name, UnitMeasureCode,
    ModifiedDate)
VALUES (N'Square Yards', N'Y2', GETDATE());
GO

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
    column_1 AS 'Computed column ' + column_2,
    column_2 varchar(30)
        CONSTRAINT default_name DEFAULT ('my column default'),
    column_3 rowversion,
    column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4)
    VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4)
    VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2)
    VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 ( column_1 int IDENTITY, column_2 VARCHAR(30));
GO
INSERT T1 VALUES ('Row #1');
INSERT T1 (column_2) VALUES ('Row #2');
GO
SET IDENTITY_INSERT T1 ON;
GO
INSERT INTO T1 (column_1,column_2)
    VALUES (-99, 'Explicit identity value');
GO
SELECT column_1, column_2
FROM T1;
GO

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
    column_1 int IDENTITY,
    column_2 uniqueidentifier,
);
GO
INSERT INTO dbo.T1 (column_2)
    VALUES (NEWID());
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2
FROM dbo.T1;
GO

Para obter mais exemplos de sintaxe SQL favor consultar o site abaixo.
Até a próxima onde vamos tratar o comando UPDATE

Nenhum comentário:

Postar um comentário