Array
(
)

Stored Procedure e Diferentes Tipos de Dados

Akp_junior
   - 22 jan 2007

Bom Dia Pessoal!

Tenho uma stored procedure que faz uma consulta simples ao banco através do like no nome do produto que eh a q segue abaixo ....

ALTER PROCEDURE dbo.SelectProdutoByNome
@Nome nvarchar(100)
AS
SELECT ProdutoId, Nome, Fornecedores.FornecedorId, Fornecedores.RazaoSocial, Categorias.CategoriaId, Categorias.CategoriaDesc,
Tamanhos.TamanhoId, Tamanhos.TamanhoDesc, QteEstoque, QteAChegar, EmLinha, ValorCusto,
AliqMarkup, ValorPraticado, CodigoBarra, ProdutoIdMaster FROM Produtos
JOIN Fornecedores ON (Fornecedores.FornecedorId = Produtos.FornecedorId)
JOIN Categorias ON (Categorias.CategoriaId = Produtos.CategoriaId)
JOIN Tamanhos ON (Tamanhos.TamanhoId = Produtos.TamanhoId)
WHERE UPPER(Nome) LIKE @Nome);
/* SET NOCOUNT ON */
RETURN

soh que.. meu problema eh o seguinte... eu nao queria que toda hora o usuario acessasse o bd realizando uma nova consulta quando ele quiser consultar pelo id do produto por exemplo
ou... seja.. tem como verificar se eh possível converter esse parametro @Nome para inteiro e entao acrescentar um OR talvez para buscar por Nome do produto e por Id?
Existe essa possibilidade?

algo do tipo....

ALTER PROCEDURE dbo.SelectProdutoByNome
@Nome nvarchar(100)
AS
SELECT ProdutoId, Nome, Fornecedores.FornecedorId, Fornecedores.RazaoSocial, Categorias.CategoriaId, Categorias.CategoriaDesc,
Tamanhos.TamanhoId, Tamanhos.TamanhoDesc, QteEstoque, QteAChegar, EmLinha, ValorCusto,
AliqMarkup, ValorPraticado, CodigoBarra, ProdutoIdMaster FROM Produtos
JOIN Fornecedores ON (Fornecedores.FornecedorId = Produtos.FornecedorId)
JOIN Categorias ON (Categorias.CategoriaId = Produtos.CategoriaId)
JOIN Tamanhos ON (Tamanhos.TamanhoId = Produtos.TamanhoId)
WHERE UPPER(Nome) LIKE @Nome
OR Nome = cast(@Nome as int);
/* SET NOCOUNT ON */
RETURN

sendo que na sp acima quando eu passo a string logicamente ela dah erro pq nao conseguiu convert a string passada para inteiro

Grato,
Abraços

Psergio.p
   - 23 jan 2007

Porque você não coloca dois parametros de entrada na stored procedure e manda NULL no parametro não usado?

exemplo:
CREATE PROCEDURE <SUA_PROC>, @Nome VARCHAR(10),
@ID INT
AS
BEGIN
IF @ID IS NULL
...
END
ELSE
...
END

Akp_junior
   - 24 jan 2007

Pois eh irmao... poderia ser sim... soh q o problema q eu queria contornar eh o seguinte....

imagine q eu tenho um botao procurar e um textbox

eu nao sei se o dado q vai vir se eh um inteiro ou uma string.. entao eu gostaria de saber se como trazer os dados com os dois entendeu?

para nao provocar varias idas e vindas no banco...

eh uma aplicado winforms mas q eu gostaria de depois transformar em smartclient... entao... queria leve.... entendeu?.. soh por isso....