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.
A 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 nchar, nvarchar 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