entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Ejecutar stored procedure con parametro que contiene varios valores

hola, no se si alguien me pueda ayudar con esta duda que tengo
mi stored procedure en sql server tiene estos parametros

@type int, @user varchar(70), @team varchar(50),@week int

cuando ejecuto esto

 insert #idlepptA   select  [nameR],[team],[year],[week],sum([hours])as[hours] from [RIA].[dbo].[ReportSapAllDetails] where [team]in(@team) and [user]=@user and [statusSAP]in('Idle') and [week]=@week group by [nameR],[team],[year],[week] 
        select * from #idlepptA

y lo ejecuto de esta manera

 exec [RIA].[dbo].[idle]  4, '146_250_74_48',''Integration C4','Integration C3'','11'

no me trae valores, solo si le pongo un solo team

 exec [RIA].[dbo].[idle]  4, '146_250_74_48','Integration C4','11'

asi si si lo hace pero yo necesito que igual me traiga todos, desde ya gracias!

3 Respuestas

1voto

rach Puntos6010

dejo la solución:

    create table #idleppt      ([team] varchar(100),[year]int,[week]int,[hours]float)
    create table #idlepptA     ([nameR] varchar(200),[team] varchar(100),[year]int,[week]int,[hours]float)
    create table #idlepptB      ([team] varchar(100),[year]int,[week]int,[hours]float)
    create table #idlepptC      ([week]int,[hours]float)
    create table #idlepptD      ([team] varchar(100),[week]int)
    create table #idleteam      ([team] varchar(100))
    create table #tempteams         ([team] NVARCHAR(MAX))

begin
declare @start INT, @end INT

SELECT @start = 1, @end = CHARINDEX(',', @Allteam) 
WHILE @start < LEN(@Allteam) + 1 
BEGIN 
    IF @end = 0  
        SET @end = LEN(@Allteam) + 1

    INSERT INTO #tempteams ([team])  
    VALUES(SUBSTRING(@Allteam, @start, @end - @start)) 
    SET @start = @end + 1 
    SET @end = CHARINDEX(',', @Allteam, @start)
END

if @type = 1/this is for DATA/
begin

    insert #idlepptB   
        select [team],[year],[week],sum([hours])as[hours] 
        from [RIA].[dbo].[ReportSapAll] 
        where [team]in(Select team FROM #tempteams)  and [user]=@user and [statusSAP]in('Idle')  
        group by [team],[year],[week]

select * from #idlepptB
end

3votos

carlossevi Puntos63580

Traduzco tu pregunta añadiendo un poco de ironía:

Hola muy buenas, tengo una función que admite 4 parámetros y parece
que funciona bien. Lo que me sucede es que si le paso 5 parámetros da
error.

Es normal que si le pasas 5 parámetros a un procedimiento preparado para recibir 4, se genere un error. Si quieres tener un número variable de parámetros tienes dos opciones:

  • Pasarle una TABLA como parámetro al stored procedure
  • Definir un delimitador y pasar una única variable del tipo string y desde el procedure contemplar esa casuística (más complejo de tratar)

0voto

Leonardo-Tadei comentado

Me encantó tu humurística transcripción de la pregunta!
Yo, cuando la leí, no me llegué a dar cuenta de que la cantidad de parámetros variaba...

0voto

rach comentado

hola, gracias por contestar, eso ya lo se que si le paso mas parámetros a uno que espera 4 obviamente no va funcionar, yo lo que quisiera es un ejemplo como hacerlo con el delimitador, osea como dices lo mas complejo, ya que soy nueva usando sql server.
Saludos

1voto

dairon Puntos17120

Puedes hacerlo como dice @carlossevi y es un método que utilizo muy frecuentemente cuando la cosa se puede poner interesante y es utilizar delimitadores, por ejemplo valor1,valor2,valor3 y luego separo por ',' y ya tengo un arreglo de valores. Este ejemplo está bueno espero que te resuelva.
Saludos Dairon

0voto

rach comentado

hola muchas gracias por el ejemplo lo voy a revisar justo ahora y les digo mis resultados!!
Saludos

0voto

dairon comentado

si necesitas más ejemplo aquí puedes encontrar otros más, realmente solo necesitabas la idea lógica de pasar varios prametros a trabez de un string, con estos ejemplos puedes lograrlo.
Saludos

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta