INSERT INTO COM VARIOS SELECT
OU
CREATE TABLE [dbo].[tb1]([c1] [nchar](10) NULL,[c2] [nchar](10) NULL,[c3] [nchar](10) NULL) ON [PRIMARY]
CREATE TABLE [dbo].[tb2]([c1] [nchar](10) NULL,[c2] [nchar](10) NULL) ON [PRIMARY]
CREATE TABLE [dbo].[tb3]([c1] [nchar](10) NULL,[c2] [nchar](10) NULL) ON [PRIMARY]
GO
INSERT INTO [dbo].[tb1]([c1],[c2],[c3])
SELECT X, Y, Z
FROM
(VALUES
((SELECT TOP (1) [c1] FROM [teste].[dbo].[tb2]),
(SELECT TOP (1) [c1] FROM [teste].[dbo].[tb2]),
(SELECT TOP (1) [c1] FROM [teste].[dbo].[tb3])
)
) R (X, Y, Z)
WHERE R.X IS NOT NULL AND R.Y IS NOT NULL AND R.Z IS NOT NULL
fiz conforme vc disse... e deu o mesmo erro (erro da imagem anexado)
Codigo:
Codigo:
sSQL = [Ô]INSERT INTO NotaFiscalItens ( [Ô] & _
[Ô]CodigoProduto, [Ô] & _
[Ô]NomeProduto) [Ô] & _
[Ô]SELECT X, Y from [Ô] & _
[Ô](VALUES [Ô] & _
[Ô]( [Ô] & _
[Ô](SELECT produtos.codigo FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô]), [Ô] & _
[Ô](SELECT produtos.descricao FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô]) [Ô] & _
[Ô] ) [Ô] & _
[Ô]) [Ô] & _
[Ô]R (X, Y) [Ô] & _
[Ô]Where r.X Is Not Null And r.Y Is Not Null ;[Ô]
Facilite sua vida. O que você quer: Inserir o conteúdo de um select. Use o SQL Management Studio para criar seu comando de select. Quando ele estiver correto, aà então o use como cláusula de insert.
KD O TOP 1 NAS QUERYS PARA GARANTIR QUE SÓ RETORNO UM VALOR ?
Citação::
fiz conforme vc disse... e deu o mesmo erro (erro da imagem anexado)
Codigo:sSQL = [Ô]INSERT INTO NotaFiscalItens ( [Ô] & _
[Ô]CodigoProduto, [Ô] & _
[Ô]NomeProduto) [Ô] & _
[Ô]SELECT X, Y from [Ô] & _
[Ô](VALUES [Ô] & _
[Ô]( [Ô] & _
[Ô](SELECT produtos.codigo FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô]), [Ô] & _
[Ô](SELECT produtos.descricao FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô]) [Ô] & _
[Ô] ) [Ô] & _
[Ô]) [Ô] & _
[Ô]R (X, Y) [Ô] & _
[Ô]Where r.X Is Not Null And r.Y Is Not Null ;[Ô]
Perfeito, acrescentei os [Ô]TOP 1 NAS QUERYS[Ô] e nao deu mais o erro, porem ele trouxe somente 1 registro... sao 4 registros
Como faria para inserir os 4 registros com esse INSERT INTO acima?
Como faria para inserir os 4 registros com esse INSERT INTO acima?
Citação::
Perfeito, acrescentei os [Ô]TOP 1 NAS QUERYS[Ô] e nao deu mais o erro, porem ele trouxe somente 1 registro... sao 4 registros
Como faria para inserir os 4 registros com esse INSERT INTO acima?
Isso que vc está tentando fazer não faz o menor sentido...
Me recordo que no outro post, recomendei que usasse um campo auto-numeração, mas vc disse que a sequencia não poderia ser geral, tinha que ser por nota fiscal. Então, eu sugeri que vc usasse um loop.
Eu acho que vc está complicando algo que é simples.
Pense de forma lógica, independente da ferramenta que vc vai usar.
Pense comigo:
Leia todos os itens da tabela pedido item
Percorra todos os registros da tabela pedido item
Para cada registro da tabela pedido item, pega a ultima sequencia, grave os dados na tabela nota fiscal item
Fim.
Faça algo simples, depois de um tempo vc consegue ver outra solução por outro ponto de vista.
Perfeito, acrescentei os [Ô]TOP 1 NAS QUERYS[Ô] e nao deu mais o erro, porem ele trouxe somente 1 registro... sao 4 registros
Como faria para inserir os 4 registros com esse INSERT INTO acima?
Se top 1 = somente 1.
Se top 2 = somente 2 e assim por diante.
Como faria para inserir os 4 registros com esse INSERT INTO acima?
Se top 1 = somente 1.
Se top 2 = somente 2 e assim por diante.
A questão é que nao tem um numero definido de registros, pode variar de 1 até 1000
Entao é como meu amigo falou ai em cima, tem q fazer um loop que veja a quantidade de registros e vá inserindo de 1 a 1
Mais tou meio perdido pra fazer esse loop com insert into
Entao é como meu amigo falou ai em cima, tem q fazer um loop que veja a quantidade de registros e vá inserindo de 1 a 1
Mais tou meio perdido pra fazer esse loop com insert into
Como já expliquei, não pense no insert ele é só o [Ô]finalmente[Ô]. Faça seu select com os dados que quer. Quando estiver conferido que os dados estão corretos, então o seu select passa a ser a cláusula VALUES de um comando INSERT.
Olá pessoal, estou de volta! Feliz 2017 a todos...
Bem, fiz uma tabela de exemplo só com os 2 campos CodigoProduto e NomeProduto e usei a SQL abaixo e[txt-color=#e80000] funcionou certinho[/txt-color]... os 03 registros da tabela de PedidosItens foram adicionadas na tabela NotaFiscalItens.
Porem preciso inserir mais 02 campos nessa insert.... um campo chama CodigoNota que seu valor vai ser preenchido com o text que tiver no objeto txtCodNota no form...
Já o outro campo chama-se [Ô]Item[Ô] que é autonumeração, porem não é uma autonumeração geral... ou seja, se sao 3 registros, o primeiro adicionado vai ser o 1, outro 2, outro 3... já na próxima inserção... se forem 5 registros, começa do 1 e vai até o 5....
[txt-color=#e80000]Nosso amigo ai de cima disse que tenho q fazer um loop pra fazer isso.... é nessa parte que tou perdido agora...[/txt-color]
já fiz um query para pegar o ITEM e add mais 1
já fiz um query para consultar quantidade de registros buscadas
Entao tou amarrado nesse loop ai
Preciso contar a quantidade de registro que vai ser adicionado, preencher o campo ITEM com uma autonumeração e adicionar os os campos da tabela PedidosItens na tabela NotaFiscalItens
Bem, fiz uma tabela de exemplo só com os 2 campos CodigoProduto e NomeProduto e usei a SQL abaixo e[txt-color=#e80000] funcionou certinho[/txt-color]... os 03 registros da tabela de PedidosItens foram adicionadas na tabela NotaFiscalItens.
[Ô]INSERT INTO NotaFiscalItens ( [Ô] & _
[Ô]CodigoProduto, [Ô] & _
[Ô]NomeProduto [Ô] & _
[Ô] ) [Ô] & _
[Ô]SELECT pedidos_itens.cod_produto, produtos.descricao [Ô] & _
[Ô]FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido [Ô] & _
[Ô]WHERE pedidos_itens.COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô];[Ô]
Porem preciso inserir mais 02 campos nessa insert.... um campo chama CodigoNota que seu valor vai ser preenchido com o text que tiver no objeto txtCodNota no form...
Já o outro campo chama-se [Ô]Item[Ô] que é autonumeração, porem não é uma autonumeração geral... ou seja, se sao 3 registros, o primeiro adicionado vai ser o 1, outro 2, outro 3... já na próxima inserção... se forem 5 registros, começa do 1 e vai até o 5....
[txt-color=#e80000]Nosso amigo ai de cima disse que tenho q fazer um loop pra fazer isso.... é nessa parte que tou perdido agora...[/txt-color]
já fiz um query para pegar o ITEM e add mais 1
Dim lNovoCod As Long
sSQLIndice = [Ô]SELECT ISNULL(MAX(Item), 0) as ultimo_item FROM NotaFiscalItens WHERE CodigoNota = [Ô] & Val(txtCodNota.Text)
Set r = dbData.OpenRecordset(sSQLIndice)
If Not r.BOF Then lNovoCod = r([Ô]ultimo_item[Ô]) + 1
If r.State <> 0 Then r.Close
Set r = Nothing
já fiz um query para consultar quantidade de registros buscadas
sSQL = [Ô]SELECT * FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = [Ô] & Val(txtCodPedido.Text)
Set r = dbData.OpenRecordset(sSQL)
Dim varQuantRegistro As Integer
varQuantRegistro = r.RecordCount
Entao tou amarrado nesse loop ai
Preciso contar a quantidade de registro que vai ser adicionado, preencher o campo ITEM com uma autonumeração e adicionar os os campos da tabela PedidosItens na tabela NotaFiscalItens
Tópico encerrado , respostas não são mais permitidas