INSERT INTO COM VARIOS SELECT

LVFIOROT 30/12/2016 14:14:10
#470202
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


WEBIER 30/12/2016 15:44:46
#470204
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 ;[Ô]

KERPLUNK 30/12/2016 17:45:07
#470206
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.
LVFIOROT 30/12/2016 21:02:56
#470211
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 ;[Ô]


WEBIER 31/12/2016 12:41:37
#470215
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?
MARCOSLING 31/12/2016 13:25:32
#470217
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.


OMAR2011 31/12/2016 16:35:39
#470220
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.
WEBIER 31/12/2016 21:49:54
#470224
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
KERPLUNK 01/01/2017 01:25:24
#470226
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.
WEBIER 02/01/2017 15:25:49
#470258
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.

[Ô]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
Página 2 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas