Estou tentando criar uma Stored Procedure, e passo o nome de uma tabela como parâmetro e recebo esta mensagem: Deve declarar a variável da tabela "@tblName".
O que devo mudar para funcionar?
CREATE PROCEDURE [usp_SaveToErrorLog]
@tblName as nvarchar(50),
@subject as nvarchar(30)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tblName))
Begin
Insert Into @tblName
(ErrorNumber, ErrorMessage, ErrorProcedure, ErrorState, ErrorSeverity, ErrorLine)
Select
ERROR_NUMBER(), ERROR_MESSAGE(), ERROR_PROCEDURE(), ERROR_STATE(), ERROR_SEVERITY(), ERROR_LINE()
End
END
Infelizmente, você não pode usar uma variável contendo o nome da tabela em uma instrução INSERT. A mensagem de erro está realmente ocorrendo porque está esperando uma variável que é um tipo de tabela para inserir linhas, mas você está passando uma variável com um valor de string.
Você pode usar o SQL dinâmico para executar o comando usando um valor de nome de tabela de variável como este:
O que isso faz é criar dinamicamente seu comando T-SQL e armazená-lo na variável @Sql. O procedimento armazenado sp_executesql é usado para executar os comandos T-SQL na variável @Sql, que tem o nome real da tabela da variável @tblName.