AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 189098
Accepted
SQLserving
SQLserving
Asked: 2017-10-24 05:35:24 +0800 CST2017-10-24 05:35:24 +0800 CST 2017-10-24 05:35:24 +0800 CST

Inserindo ID e Data para localizar dados para o aplicativo C#/VBA

  • 772

Estou tentando permitir que os usuários carreguem uma planilha do Excel para inserir dados no banco de dados sql. Quando eles carregam dados, eu quero uma exibição de datagrid para mostrar os dados que eles acabaram de carregar no banco de dados e poder ver isso em retrospecto também com base na data.

Criei uma tabela assim:

**dbo.DB_TRACK**  
V_ID Identity  
TBL_N varchar(20)  
ID  int  
ENTR_DT date  

Eu escrevi o procedimento armazenado para uma das tabelas de banco de dados como esta:

Create Procedure dbo.Insert_Students  
(  
SName varchar(10),  
SAge varchar(10),  
SAdmit_Dt varchar(10)  
)  
    Declare @id table(id int),  
     @pk int,  
     @iSAge int,  
     @iSAdmit_Dt date  

     Set @iSAge=@SAge  
     Set @iSAdmit_Dt=Convert(Date,@SAdmit_Dt)

    BEGIN TRY  

      BEGIN TRANSACTION  

      Insert into dbo.Student(Name,Age,AdmissionDt)  
      OUTPUT INSERTED.S_ID into @id    
      Values  
      (@SName,@iSAge,@iSAdmit_Dt)  

      COMMIT TRANSACTION  

      BEGIN TRANSACTION  

      Insert into dbo.DB_TRACK (TBL_N, ID, ENTR_DT ) 
      VALUES ('dbo.Student', (Select @pk=id from @id),GETDATE)

      COMMIT TRANSACTION  

    END TRY  
    BEGIN CATCH

      IF @@TRANCOUNT > 0  
          ROLLBACK TRANSACTION  

    END CATCH

Estou recebendo o erro:

Sintaxe incorreta perto de '='.

ATUALIZAÇÃO:
Não estou recebendo mais este erro (Graças a David Browne) e consegui salvar o SP, mas ao executar o SP, estou recebendo este erro:

Falha na conversão ao converter data e/ou hora da cadeia de caracteres.

Eu tentei Convert(date,GetDate()), mas não funcionou

O código que chama esse procedimento armazenado está no VBA assim:

Dim SName, SAge,SAdmit_DT as String  
Dim oSName, oSAge,oSAdmit_DT as ADODB.Parameter  

SName= ws.Cells(1, 11)  
SAge = ws.Cells(1, 12)  
SAdmit_DT = ws.Cells(1, 13)  

Set oSName = cmd.CreateParameter("@SName", adVarChar, adParamInput, 10, SName)  
cmd.Parameters.Append oSName  
Set oSAge = cmd.CreateParameter("@SAge", adVarChar, adParamInput, 10, SAge)  
cmd.Parameters.Append oSAge  
Set oSAdmit_DT = cmd.CreateParameter("@SAdmit_DT", adVarChar, adParamInput, 10, SAdmit_DT)  
cmd.Parameters.Append oSAdmit_DT 

cmd.Execute' This is where it errors out

Eu tentei remover o SAdmit_Dt, mas ainda recebi o erro
Tentei passar DATE () pelo Excel, mas recebi um erro de estouro de aritmética
Alguma idéia de como corrigir isso? Também existe uma maneira melhor de fazer o que estou tentando fazer?

sql-server stored-procedures
  • 1 1 respostas
  • 63 Views

1 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2017-10-24T06:02:13+08:002017-10-24T06:02:13+08:00

    -Por favor, não use nomes de coluna curtos e enigmáticos.
    -Não há razão para envolver declarações individuais em transações explícitas.

    Você desejará extrair o valor da chave da variável de tabela em uma instrução separada. Algo como:

    Create Procedure dbo.Insert_Student  
    (  
    SName varchar(10),  
    SAge int,  
    SAdmit_Dt date  
    )  
    BEGIN
        Declare @ids table(id int)
        Declare @pk int 
    
        BEGIN TRY  
    
          BEGIN TRANSACTION  
    
          Insert into dbo.Student(Name,Age,AdmissionDt)  
          OUTPUT INSERTED.S_ID into @id    
          Values  (@SName,@SAge,@SAdmit_Dt);
    
          set @pk = (Select id from @id);
    
          Insert into dbo.DB_TRACK (TBL_N, ID, ENTR_DT ) 
          VALUES ('dbo.Student', @pk,GETDATE());
    
          COMMIT TRANSACTION  
    
        END TRY  
        BEGIN CATCH
    
          IF @@TRANCOUNT > 0  
              ROLLBACK TRANSACTION  
    
          THROW;
    
        END CATCH
    END
    
    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve