Usuário com melhor resposta
Clausula Where com variaveis?

Pergunta
-
Gostaria de saber se é possível fazer em uma procedure isto abaixo?
@idcli int,
@idade int,
@nome nvarchar
as update cliente set idade = @idade where idCli =@idcli and nome = @nome
Apenas passar duas variáveis através do Where "logicamente é isso" mas como faço????
Respostas
-
Exatamente ele "converte" a informação do campo em tempo de execução e não o campo da tabela em si. O campo fica do mesmo jeito.
Roberson A. Naves Analista de Sistemas
- Sugerido como Resposta Roberson Naves quarta-feira, 4 de julho de 2012 12:18
- Marcado como Resposta Igor S. Paim quarta-feira, 4 de julho de 2012 16:58
Todas as Respostas
-
Lá vai:
CREATE PROCEDURE dbo.sp_UPD_Cliente @idcli INT = NULL , @idade INT,
@nome VARCHAR(MAX) AS BEGIN SET NOCOUNT ON UPDATE dbo.Cliente SET idade = @idade WHERE idCli = @idcli and nome=@nome END GO
Roberson A. Naves Analista de Sistemas
- Sugerido como Resposta Roberson Naves terça-feira, 3 de julho de 2012 20:12
- Não Sugerido como Resposta Igor S. Paim terça-feira, 3 de julho de 2012 21:00
-
Olá Zigor,
Voce teria que fazer assim
CREATE PROCEDURE UPDATE_CLIENTE --Parametros @IDCLI INT, @IDADE INT, @NOME NVARCHAR(50) AS BEGIN --UPDATE UPDATE CLIENTE SET IDADE = @IDADE WHERE IDCLI = @IDCLI AND NOME = @NOME END
Att.
Lukas Baldan- Editado Lukas de Castro Ruocco Baldan terça-feira, 3 de julho de 2012 20:14
-
Lá vai:
CREATE PROCEDURE dbo.sp_UPD_Cliente @idcli INT = NULL , @idade INT,
@nome VARCHAR(MAX) AS BEGIN SET NOCOUNT ON UPDATE dbo.Cliente SET idade = @idade WHERE idCli = @idcli and nome=@nome END GO
Roberson A. Naves Analista de Sistemas
Roberson a seu Proc funcionou
(eu apenas referenciei um exemplo do que queria fazer)
seguindo a logica da sua proc fiz uma com os meus dados, mas só que eu tenho uma variavél do tipo text, que acaba dando incompatibilidade teria outra forma de fazer isso?
segue o código abaixo:
@categoria INT,
@mva decimal,
@ncm text,
@uf nvarchar(2)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.stMva
SET
mva = @mva
WHERE
idCategoriaST = @categoria and uf = @uf and ncm = @ncm
END
GORetornando o erro:
Msg 402, Level 16, State 1, Procedure DIM_Simulador_MVA_Update, Line 14
The data types text and text are incompatible in the equal to operator.@ZigorPaim
-
Existe uma limitação no operador lógico "=" para campos tipo TEXT.
Ou você altera o tipo do campo para VARCHAR(MAX) por exemplo.
Ou faz um CAST tipo assim.
CREATE PROCEDURE procXbpTTzh
@categoria INT,
@mva decimal,
@ncm varchar(max),
@uf nvarchar(2)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.stMva
SET
mva = @mva
WHERE
idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm
END
GO
Roberson A. Naves Analista de Sistemas
- Editado Roberson Naves terça-feira, 3 de julho de 2012 21:16
- Sugerido como Resposta Roberson Naves terça-feira, 3 de julho de 2012 21:16
-
Existe uma limitação no operador lógico "=" para campos tipo TEXT.
Ou você altera o tipo do campo para VARCHAR(MAX) por exemplo.
Ou faz um CAST tipo assim.
CREATE PROCEDURE procXbpTTzh
@categoria INT,
@mva decimal,
@ncm varchar(max),
@uf nvarchar(2)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.stMva
SET
mva = @mva
WHERE
idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm
END
GO
Roberson A. Naves Analista de Sistemas
Roberson
só para ver se eu entendi me diga, no momento que faço esse CAST
idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm
o campo ncm na tabela mesmo sendo text ele consegue receber um varchar(max) sem ter que alterar o tipo do campo na tabela?
ou ele altera nas propriedades da tabela o tipo de text para varchar(max)?
@ZigorPaim
-
Exatamente ele "converte" a informação do campo em tempo de execução e não o campo da tabela em si. O campo fica do mesmo jeito.
Roberson A. Naves Analista de Sistemas
- Sugerido como Resposta Roberson Naves quarta-feira, 4 de julho de 2012 12:18
- Marcado como Resposta Igor S. Paim quarta-feira, 4 de julho de 2012 16:58