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?
-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: