-Я пытаюсь выполнить хранимую процедуру, которая должна вернуть мне результат Count, но это дает мне следующую ошибку (на португальском):
2019-04-01 10:13:49.215 WARN 7068 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 214, SQLState: S0002
2019-04-01 10:13:49.216 ERROR 7068 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : O procedimento espera o parâmetro '@statement' do tipo 'ntext/nchar/nvarchar'.
-Я не совсем понимаюпотому что единственный параметр, который я установил, - это имя таблицы, которое я передаю в своем коде выполнения репозитория.
-Это моя хранимая процедура:
ALTER PROCEDURE [dbo].[usp_verificarTabelaCadMov] (
@NomeTabela VARCHAR(20)
)
AS
BEGIN
SET NOCOUNT ON;
Declare @Comando Varchar(1000)
Declare @Resultado INT;
Set @Comando = 'SELECT @Resultado = COUNT(*) FROM sysobjects WHERE nome = ' + QUOTENAME(@NomeTabela)
exec sp_executesql @Comando , N'@Resultado INT OUTPUT', @Resultado = @Resultado OUTPUT
SELECT @Resultado
END;
GO
-Это моевыполнение в моем репозитории:
@Query(value = "EXECUTE usp_verificarTabelaCadMov :tabela", nativeQuery = true)
public Integer verificarTabela(@Param("tabela") String tabela);
-В моем контроллере:
String tabela = ("M00"+(String.valueOf(Math.round(funcionario.getEmpresa().getCodigo())))+anoInicio+mesAtual);
if (eventoEspelhoPontoRepository.verificarTabela(tabela) > 1) {
registros.addAll(eventoEspelhoPontoRepository.findAllRegistrosByFuncionarioTableUnica(
tabela, dataInicioString, dataFimString, funcionario.getCracha()));
}
EDIT1 - я пытаюсь сделать здесь, выбрать ряд таблиц, но иногда некоторые изтаблиц не существует, поэтому я пытаюсь выполнить проверку, если таблица существует, и если она существует, она должна выполнить Select * из этой таблицы, в противном случае ее следует игнорировать.Это единственный способ, который я нашел, чтобы сделать это, если у кого-то есть лучший способ, пожалуйста, помогите мне.
Кстати, это мой выбор, упомянутый выше, я попытался проверить существование таблицы с помощью пункта ЕСЛИ СУЩЕСТВУЕТно это все же работает, я продолжаю получать сообщение об ошибке «НЕ МОЖЕТ ЭКСТРАКТИРОВАТЬ РЕЗУЛЬТАТ УСТАНОВИТЬ» в моей основной программе.
ALTER PROCEDURE [dbo].[usp_listarRegistrosMov]
--PARÂMETROS
@NomeTabela VARCHAR(20),
@DataInicial VARCHAR(20),
@DataFinal VARCHAR(20),
@Cracha FLOAT
AS
IF EXISTS(SELECT name FROM sysobjects WHERE name = @NomeTabela AND xtype = 'U')
BEGIN
Declare @Comando Varchar(1000)
Set @Comando = 'SELECT * FROM ' + @NomeTabela + ' WHERE mov_data BETWEEN ''' + @DataInicial + ''' AND ''' + @DataFinal + ''' AND mov_cracha = ' + CAST(@Cracha AS VARCHAR(50))
Exec(@Comando)
END
GO
РЕДАКТИРОВАТЬ 2: Я пытался использовать OBJECT_ID в том же sp также:
IF OBJECT_ID(@NomeTabela) IS NOT NULL
Но всегда получаю ошибку:
2019-04-01 11:18:03.147 WARN 7068 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2019-04-01 11:18:03.148 ERROR 7068 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : The statement did not return a result set.