Proceso Almacenado de SQL SERVER, modificación!

Desde
30 Ene 2014
Mensajes
347
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
Bueno, ya que no vi ningún foro especifico para esto vendo a publicarlo aquí, pido disculpas si no es el foro indicado.

Codigo Sin editar:

PHP:
ALTER PROCEDURE	[dbo].[WZ_CS_ModifyCastleOwnerInfo]
	@iMapSvrGroup		SMALLINT,	-- 맵서버 그룹
	@iCastleOccupied	INT,		-- 성의 사용자 소유여부 (0:NPC 소유)
	@szOwnGuildName	VARCHAR(8)	-- 성을 소유한 길드의 이름
As
Begin
	BEGIN TRANSACTION
	
	SET NOCOUNT ON

	IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
				WHERE MAP_SVR_GROUP = @iMapSvrGroup)
	BEGIN
		UPDATE MuCastle_DATA 
		SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
		WHERE MAP_SVR_GROUP = @iMapSvrGroup

		SELECT 1 As QueryResult	-- 맵서버군의 정보가 존재하여 업데이트에 성공했다.
	END
	ELSE
	BEGIN
		SELECT 0 As QueryResult	-- 맵서버군의 정보가 존재하지 않으므로 업데이트에 실패했다.
	END

	IF(@@Error <> 0 )
		ROLLBACK TRANSACTION
	ELSE	
		COMMIT TRANSACTION

	SET NOCOUNT OFF	
End


Esta es la modificación que quiero hacer.

PHP:
ALTER PROCEDURE    [dbo].[WZ_CS_ModifyCastleOwnerInfo]
    @iMapSvrGroup        SMALLINT,    -- 맵서버 그룹
    @iCastleOccupied    INT,        -- 성의 사용자 소유여부 (0:NPC 소유)
    @szOwnGuildName    VARCHAR(8)    -- 성을 소유한 길드의 이름
As
Begin
    BEGIN TRANSACTION
    
    SET NOCOUNT ON

    IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
                WHERE MAP_SVR_GROUP = @iMapSvrGroup)
    BEGIN
        UPDATE MuCastle_DATA 
        SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
        WHERE MAP_SVR_GROUP = @iMapSvrGroup

        SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.
    END
    ELSE
    BEGIN
        SELECT 0 As QueryResult    -- 맵서버군의 정보가 존재하지 않으므로 업데이트에 실패했다.
    END
    
     BEGIN
        UPDATE Guild 
        SET CSWon = CSWon+1
        WHERE G_Name = @szOwnGuildName

        SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.
    END
   
    BEGIN
        SELECT 0 As QueryResult    -- 맵서버군의 정보가 존재하지 않으므로 업데이트에 실패했다.
    END
    
    

    IF(@@Error <> 0 )
        ROLLBACK TRANSACTION
    ELSE    
        COMMIT TRANSACTION

    SET NOCOUNT OFF    
End

Usando la opcion "Usar plan de ejecución estimado" me arroja lo siguiente.


1zi0c0.jpg
 
Última edición:

S3RGI0

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Jul 2014
Mensajes
84
cual es la pregunta?, quieres analizar el costo de ejecución de el procedimiento almacenado?
 

Drakezael

Gamma
Desde
30 Ene 2014
Mensajes
347
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
cual es la pregunta?, quieres analizar el costo de ejecución de el procedimiento almacenado?

La pregunta es que si la modificación ( nuevo update que hize ) es correcto.

lo del plan de ejecución estimado, es porque creo que me detectaba los errores, por eso lo use, ya que no se la manera de probar si un almacenamiento esta ejecutándose correctamente, en conclusión no se hacer correr el almacenamiento que estoy editando para ver si funciona correctamente.
 

S3RGI0

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Jul 2014
Mensajes
84
Mira por lo que veo en el procedimiento hace la comprobacion:
Insertar CODE, HTML o PHP:
IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
                WHERE MAP_SVR_GROUP = @iMapSvrGroup)

Si es correcta, ejecuta:

Insertar CODE, HTML o PHP:
UPDATE MuCastle_DATA 
        SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
        WHERE MAP_SVR_GROUP = @iMapSvrGroup

y devuelve un entero 1, por el SELECT

Insertar CODE, HTML o PHP:
 SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.

Entonces si lo que quieres es que se ejecute cuando cumpla la condicion inicial (la del exist) entonces debe ir dentro de esta, asi:

Insertar CODE, HTML o PHP:
ALTER PROCEDURE    [dbo].[WZ_CS_ModifyCastleOwnerInfo]
    @iMapSvrGroup        SMALLINT,    -- 맵서버 그룹
    @iCastleOccupied    INT,        -- 성의 사용자 소유여부 (0:NPC 소유)
    @szOwnGuildName    VARCHAR(8)    -- 성을 소유한 길드의 이름
As
Begin
    BEGIN TRANSACTION
    
    SET NOCOUNT ON

    IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
                WHERE MAP_SVR_GROUP = @iMapSvrGroup)
    BEGIN
        UPDATE MuCastle_DATA 
        SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
        WHERE MAP_SVR_GROUP = @iMapSvrGroup

       UPDATE Guild 
        SET CSWon = CSWon+1
        WHERE G_Name = @szOwnGuildName

        SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.
    END
    ELSE
    BEGIN
        SELECT 0 As QueryResult    -- 맵서버군의 정보가 존재하지 않으므로 업데이트에 실패했다.
    END

    IF(@@Error <> 0 )
        ROLLBACK TRANSACTION
    ELSE    
        COMMIT TRANSACTION

    SET NOCOUNT OFF    
End

Para ejecutar un procedimiento almacenado debes usar, por ejemplo este:
pide 3 argumentos que son:

Insertar CODE, HTML o PHP:
 @iMapSvrGroup        SMALLINT,   그룹 -- 맵서버 
 @iCastleOccupied    INT,        -- 성의 사용자 소유여부 (0:NPC 소유)
 @szOwnGuildName    VARCHAR(8)    -- 성을 소유한 길드의 이름

Sus respectivos tipos de datos son smallint, int y varchar de 8, asi que para ejecutarlo puedes hacer esto:

Insertar CODE, HTML o PHP:
USE tu_database
EXEC dbo.WZ_CS_ModifyCastleOwnerInfo 32767, 5, 'cadenad8'

solo es un ejemplo, otra forma es ir al sql server management, desplegar la base de datos, hasta abajo hay una parte que dice programacion, desplegarla y ahi dice procedimientos almacenados, te aparecerán los que hay, seleccionas uno, click derecho y ejecutar, te pedira los datos que necesite el procedimiento almacenado.

espero haberte ayudado :)

PD: guarda un respaldos
 

Drakezael

Gamma
Desde
30 Ene 2014
Mensajes
347
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
Mira por lo que veo en el procedimiento hace la comprobacion:
Insertar CODE, HTML o PHP:
IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
                WHERE MAP_SVR_GROUP = @iMapSvrGroup)

Si es correcta, ejecuta:

Insertar CODE, HTML o PHP:
UPDATE MuCastle_DATA 
        SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
        WHERE MAP_SVR_GROUP = @iMapSvrGroup

y devuelve un entero 1, por el SELECT

Insertar CODE, HTML o PHP:
 SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.

Entonces si lo que quieres es que se ejecute cuando cumpla la condicion inicial (la del exist) entonces debe ir dentro de esta, asi:

Insertar CODE, HTML o PHP:
ALTER PROCEDURE    [dbo].[WZ_CS_ModifyCastleOwnerInfo]
    @iMapSvrGroup        SMALLINT,    -- 맵서버 그룹
    @iCastleOccupied    INT,        -- 성의 사용자 소유여부 (0:NPC 소유)
    @szOwnGuildName    VARCHAR(8)    -- 성을 소유한 길드의 이름
As
Begin
    BEGIN TRANSACTION
    
    SET NOCOUNT ON

    IF EXISTS ( SELECT MAP_SVR_GROUP FROM MuCastle_DATA  WITH (READUNCOMMITTED) 
                WHERE MAP_SVR_GROUP = @iMapSvrGroup)
    BEGIN
        UPDATE MuCastle_DATA 
        SET CASTLE_OCCUPY = @iCastleOccupied, OWNER_GUILD = @szOwnGuildName
        WHERE MAP_SVR_GROUP = @iMapSvrGroup

       UPDATE Guild 
        SET CSWon = CSWon+1
        WHERE G_Name = @szOwnGuildName

        SELECT 1 As QueryResult    -- 맵서버군의 정보가 존재하여 업데이트에 성공했다.
    END
    ELSE
    BEGIN
        SELECT 0 As QueryResult    -- 맵서버군의 정보가 존재하지 않으므로 업데이트에 실패했다.
    END

    IF(@@Error <> 0 )
        ROLLBACK TRANSACTION
    ELSE    
        COMMIT TRANSACTION

    SET NOCOUNT OFF    
End

Para ejecutar un procedimiento almacenado debes usar, por ejemplo este:
pide 3 argumentos que son:

Insertar CODE, HTML o PHP:
 @iMapSvrGroup        SMALLINT,   그룹 -- 맵서버 
 @iCastleOccupied    INT,        -- 성의 사용자 소유여부 (0:NPC 소유)
 @szOwnGuildName    VARCHAR(8)    -- 성을 소유한 길드의 이름

Sus respectivos tipos de datos son smallint, int y varchar de 8, asi que para ejecutarlo puedes hacer esto:

Insertar CODE, HTML o PHP:
USE tu_database
EXEC dbo.WZ_CS_ModifyCastleOwnerInfo 32767, 5, 'cadenad8'

solo es un ejemplo, otra forma es ir al sql server management, desplegar la base de datos, hasta abajo hay una parte que dice programacion, desplegarla y ahi dice procedimientos almacenados, te aparecerán los que hay, seleccionas uno, click derecho y ejecutar, te pedira los datos que necesite el procedimiento almacenado.

espero haberte ayudado :)

PD: guarda un respaldos



Si, bueno se eso, y ya he ejecutado la modificación, me la corrio bien, "comando ejecutados correctamente" de manera que entonces si modifique bien? solo es primera vez que modifico eso.
 

S3RGI0

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Jul 2014
Mensajes
84
si, ahora debes ejecutarlo, para ver si hace lo que debería hacer.
 

Drakezael

Gamma
Desde
30 Ene 2014
Mensajes
347
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
De nada, me gusta sql server xD


jajaj si, yo espero hacer muchos avances, y crear cosas que otros no tengan dentro del juego llamado muonline, ya que me gusta su desarrollo, espero aprender mucho ^^
 
Arriba