Crear procedimientos almacenados

download Crear procedimientos almacenados

of 16

Transcript of Crear procedimientos almacenados

  • 7/26/2019 Crear procedimientos almacenados

    1/16

    Crear procedimientosalmacenados (motor debase de datos)SQL Server 2008 R2Otras versiones

    Puede crear procedimientos almacenados mediante la instruccin CREATE PROCEDUREde Transact-S!"Antes de crearlos# ten$a en cuenta lo si$uiente%

    !as instrucciones CREATE PROCEDURE no se pueden combinar con otrasinstrucciones S! en el mismo lote"

    Para crear procedimientos# debe disponer del permiso CREATE PROCEDURE enla base de datos & del permiso A!TER en el es'uema donde se crea elprocedimiento" En procedimientos almacenados C!R# debe ser propietario delensamblado al 'ue se ace reerencia en *metod+speci,er o disponer delpermiso RE.ERE/CES en dico ensamblado"

    !os procedimientos almacenados son ob0etos de 1mbito de es'uema & susnombres deben a0ustarse a las re$las para los identi,cadores"

    Slo puede crear un procedimiento almacenado en la base de datos actual"Cuando cree un procedimiento almacenado# deber1 especi,car lo si$uiente%

    Todos los par1metros de entrada & de salida del lote o del procedimiento 'uereali2a la llamada"

    !as instrucciones de pro$ramacin 'ue realicen operaciones en la base dedatos# incluidas las llamadas a otros procedimientos"

    El valor de estado devuelto al lote o al procedimiento 'ue reali2a la llamada# a,n de indicar 'ue la operacin se a reali2ado correctamente o 'ue se aproducido un error (& el motivo del mismo)"

    !as instrucciones de control de errores necesarias para detectar & administrarposibles errores"!as unciones de control de errores tales como ERROR+!3/E &ERROR+PROCEDURE se pueden especi,car en el procedimiento almacenado"Para obtener m1s inormacin# vea Usar TR4"""CATC5 en Transact-S!"

    Asi$nar nombre a los procedimientos almacenadosSe recomienda 'ue no cree procedimientos almacenados con el pre,0o sp_" S! Serverutili2a el pre,0o sp_para indicar procedimientos almacenados del sistema" El nombre'ue eli0a puede entrar en con6icto con al$7n procedimiento uturo del sistema" Si laaplicacin utili2a reerencias de nombre completo 'ue no son de es'uema & el nombrede su procedimiento entra en con6icto con un procedimiento del sistema# la aplicacin$enerar1 un error &a 'ue el nombre se enla2a con el procedimiento del sistema# no conel su&o"

    https://technet.microsoft.com/es-es/library/ms179296(v=sql.105).aspxhttp://void%280%29/https://technet.microsoft.com/es-es/library/ms179296(v=sql.105).aspxhttp://void%280%29/
  • 7/26/2019 Crear procedimientos almacenados

    2/16

    Un procedimiento almacenado de,nido por el usuario# con el mismo nombre 'ue unprocedimiento almacenado del sistema & 'ue no est8 cali,cado o se encuentre en eles'uema dbono se e0ecutar1 nunca9 siempre se e0ecutar1 el procedimientoalmacenado del sistema" En el e0emplo si$uiente se muestra este comportamiento"USE AdventureWorks2008R2;GO

    CREATE PROCEDURE dbo.sp_!oAS SE"ECT #$rst%&'e( "&st%&'e #RO) Person.Person;GOE*EC sp_!o;E*EC dbo.sp_!o;GODROP PROCEDURE dbo.sp_!o;GO

    Si se utili2a un cali,cador de es'uema e:pl;cito tambi8n se consi$ue una li$era me0oradel rendimiento" !a resolucin de nombres es un poco m1s r1pida si

  • 7/26/2019 Crear procedimientos almacenados

    3/16

    Utilizar excesivamente los procedimientos almacenados temporales puede causar conflictos en las tabnegativa al rendimiento. Se recomienda que utilice en su lugar sp_executesql. El procedimiento sp_esistema y, por tanto, evita el problema.

    !os procedimientos almacenados C!R no se pueden crear como procedimientos

    almacenados temporales"E0emplosA" Utili2ar un procedimiento sencillo con una instruccinSE!ECT comple0aEl si$uiente procedimiento almacenado devuelve todos los empleados (nombre &apellidos)# sus puestos & los nombres de sus departamentos a partir de una vista" Esteprocedimiento almacenado no utili2a nin$7n par1metro"Transact-S!USE AdventureWorks2008R2;GO+# O,-ECT_+D /u'&nResour1es.uspGetAE'po3ees/( /P/ 4 +S %OT %U""

    DROP PROCEDURE u'&nResour1es.uspGetAE'po3ees;GOCREATE PROCEDURE u'&nResour1es.uspGetAE'po3eesAS SET %OCOU%T O%; SE"ECT "&st%&'e( #$rst%&'e( Dep&rt'ent #RO) u'&nResour1es.vE'po3eeDep&rt'ent$stor3;GO

    El procedimiento almacenado uspetEmplo&eesse puede e0ecutar de estas ormas%Transact-S!E*ECUTE u'&nResour1es.uspGetAE'po3ees;GO55 OrE*EC u'&nResour1es.uspGetAE'po3ees;GO55 Or( $6 t!$s pro1edure $s t!e 6$rst st&te'ent $t!$n & b&t1!7u'&nResour1es.uspGetAE'po3ees;

    B" Utili2ar un procedimiento simple con par1metrosEl si$uiente procedimiento almacenado slo devuelve el empleado especi,cado(nombre & apellidos)# su puesto & el nombre de su departamento a partir de una vista"

    Este procedimiento almacenado acepta coincidencias e:actas de los par1metrospasados"Transact-S!USE AdventureWorks2008R2;GO+# O,-ECT_+D /u'&nResour1es.uspGetE'po3ees/( /P/ 4 +S %OT %U""

    DROP PROCEDURE u'&nResour1es.uspGetE'po3ees;GOCREATE PROCEDURE u'&nResour1es.uspGetE'po3ees

    http://void%280%29/http://void%280%29/
  • 7/26/2019 Crear procedimientos almacenados

    4/16

    "&st%&'e nv&r1!&r904(#$rst%&'e nv&r1!&r904

    AS

    SET %OCOU%T O%; SE"ECT #$rst%&'e( "&st%&'e(Dep&rt'ent #RO) u'&nResour1es.vE'po3eeDep&rt'ent$stor3

    WERE #$rst%&'e : #$rst%&'e A%D "&st%&'e : "&st%&'e;GO

    El procedimiento almacenado uspetEmplo&eesse puede e0ecutar de estas ormas%Transact-S!E*ECUTE u'&nResour1es.uspGetE'po3ees %/A1ker'&n/( %/P$&r/;55 OrE*EC u'&nResour1es.uspGetE'po3ees "&st%&'e : %/A1ker'&n/( #$rst%&'e :%/P$&r/;GO55 Or

    E*ECUTE u'&nResour1es.uspGetE'po3ees #$rst%&'e : %/P$&r/( "&st%&'e :%/A1ker'&n/;GO55 Or( $6 t!$s pro1edure $s t!e 6$rst st&te'ent $t!$n & b&t1!7u'&nResour1es.uspGetE'po3ees %/A1ker'&n/( %/P$&r/;

    C" Utili2ar un procedimiento simple con par1metros comod;nEl si$uiente procedimiento almacenado slo devuelve los empleados especi,cados(nombre & apellidos)# sus puestos & los nombres de sus departamentos a partir de unavista" Este patrn de procedimiento almacenado coincide con los par1metros pasadoso# si 8stos no se proporcionan# utili2a los valores predeterminados (apellidos 'uecomien2an por la letra D)"Transact-S!USE AdventureWorks2008R2;GO+# O,-ECT_+D /u'&nResour1es.uspGetE'po3ees2/( /P/ 4 +S %OT %U""

    DROP PROCEDURE u'&nResour1es.uspGetE'po3ees2;GOCREATE PROCEDURE u'&nResour1es.uspGetE'po3ees2

    "&st%&'e nv&r1!&r904 : %/D/(#$rst%&'e nv&r1!&r904 : %//

    ASSET %OCOU%T O%;

    SE"ECT #$rst%&'e( "&st%&'e( Dep&rt'ent

    #RO) u'&nResour1es.vE'po3eeDep&rt'ent$stor3 WERE #$rst%&'e "+

  • 7/26/2019 Crear procedimientos almacenados

    5/16

    E*ECUTE u'&nResour1es.uspGetE'po3ees2;55 OrE*ECUTE u'&nResour1es.uspGetE'po3ees2 %/W$/;55 OrE*ECUTE u'&nResour1es.uspGetE'po3ees2 #$rst%&'e : %//;55 OrE*ECUTE u'&nResour1es.uspGetE'po3ees2 %/=C&rs=OE>n/;

    55 OrE*ECUTE u'&nResour1es.uspGetE'po3ees2 %/esse/( %/Ste6en/;55 OrE*ECUTE u'&nResour1es.uspGetE'po3ees2 %//( %/S/;

    D" Utili2ar par1metros OUTPUTEl si$uiente e0emplo crea el procedimiento almacenado uspet!ist# 'ue devuelve unalista de productos con precios 'ue no superan un importe especi,cado" El e0emplomuestra la utili2acin de varias instrucciones SE!ECT & varios par1metros OUTPUT" !ospar1metros OUTPUT permiten a un procedimiento e:terno# un proceso por lotes o m1s

    de una instruccin Transact-S! tener acceso a un con0unto de valores durante lae0ecucin del procedimiento"Transact-S!USE AdventureWorks2008R2;GO+# O,-ECT_+D /Produ1t$on.uspGet"$st/( /P/ 4 +S %OT %U""

    DROP PROCEDURE Produ1t$on.uspGet"$st;GOCREATE PROCEDURE Produ1t$on.uspGet"$st Produ1t v&r1!&r?04

    ( )&@Pr$1e 'one3( Co'p&rePr$1e 'one3 OUTPUT

    ( "$stPr$1e 'one3 OUTAS

    SET %OCOU%T O%; SE"ECT p.=%&'e> AS Produ1t( p."$stPr$1e AS /"$st Pr$1e/ #RO) Produ1t$on.Produ1t AS p -O+% Produ1t$on.Produ1tSub1&teor3 AS s

    O% p.Produ1tSub1&teor3+D : s.Produ1tSub1&teor3+D WERE s.=%&'e> "+

  • 7/26/2019 Crear procedimientos almacenados

    6/16

    Nota

    La variable OUTUT debe definirse durante la creaci!n del procedimiento, as" como durante la utiliz

    la variable no tienen por qu$ coincidir% sin embargo, el tipo de datos y la posici!n de los par#metros dutilice @Listprice=variable'.

    Transact-S!DEC"ARE Co'p&rePr$1e 'one3( Cost 'one3E*ECUTE Produ1t$on.uspGet"$st /,$kes/( 00(

    Co'p&rePr$1e OUT(Cost OUTPUT

    +# Cost B: Co'p&rePr$1e,EG+% PR+%T /T!ese produ1ts 1&n be pur1!&sed 6or ess t!&n

    /RTR+)CASTCo'p&rePr$1e AS v&r1!&r20444/./E%DE"SE PR+%T /T!e pr$1es 6or & produ1ts $n t!$s 1&teor3 e@1eed

    / RTR+)CASTCo'p&rePr$1e AS v&r1!&r20444/./

    Este es el con0unto de resultados parciales%Produ1t "$st Pr$1e55555555555555555555555555555555555555555555555555 555555555555555555Ro&d590 ,&1k( 98 9F.)ount&$n5900 S$ver( ?0 9H?.)ount&$n5900 S$ver( ?2 9H?....Ro&d590 ,&1k( ?8 9F.

    Ro&d590 ,&1k( 92 9F.

    I? ros4 &66e1ted4

    T!ese $te's 1&n be pur1!&sed 6or ess t!&n 00.00.

  • 7/26/2019 Crear procedimientos almacenados

    7/16

    Especi,car la direccin de

    un par1metroSQL Server 2008 R2Otras versiones

    !a direccin de un par1metro puede ser de entrada# 'ue indica 'ue un valor se pasa alpar1metro de entrada de un procedimiento almacenado# o de salida# 'ue indica 'ue el

    procedimiento almacenado devuelve un valor al pro$rama 'ue lo llama mediante unpar1metro de salida" El valor predeterminado es un par1metro de entrada"

    Para especi,car un par1metro de salida# debe indicar la palabra clave OUTPUT en lade,nicin del par1metro del procedimiento almacenado" El procedimiento almacenadodevuelve el valor actual del par1metro de salida al pro$rama 'ue lo llama cuando seabandona el procedimiento almacenado" El pro$rama 'ue reali2a la llamada tambi8ndebe utili2ar la palabra clave OUTPUT al e0ecutar el procedimiento almacenado# a ,n de$uardar el valor del par1metro en una variable 'ue se pueda utili2ar en el pro$rama'ue llama" Para obtener m1s inormacin# vea Devolver datos mediante par1metrosOUTPUT"

    E0emplos

    El si$uiente e0emplo crea el procedimiento almacenado Production"usp+et!ist#'ue devuelve una lista de productos con precios 'ue no superan un importeespeci,cado" El e0emplo muestra la utili2acin de varias instrucciones SE!ECT & variospar1metros OUTPUT" !os par1metros OUTPUT permiten a un procedimiento e:terno# unproceso por lotes o m1s de una instruccin Transact-S! tener acceso a un con0unto devalores durante la e0ecucin del procedimiento"

    Transact-S!

    USE AdventureWorks2008R2;GO+# O,-ECT_+D /Produ1t$on.uspGet"$st/( /P/ 4 +S %OT %U""

    DROP PROCEDURE Produ1t$on.uspGet"$st;GOCREATE PROCEDURE Produ1t$on.uspGet"$st Produ1t v&r1!&r?04

    ( )&@Pr$1e 'one3( Co'p&rePr$1e 'one3 OUTPUT

    ( "$stPr$1e 'one3 OUT

    https://technet.microsoft.com/es-es/library/ms187004(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms187004(v=sql.105).aspxhttp://void%280%29/https://technet.microsoft.com/es-es/library/ms187004(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms187004(v=sql.105).aspxhttp://void%280%29/
  • 7/26/2019 Crear procedimientos almacenados

    8/16

    AS SET %OCOU%T O%; SE"ECT p.=%&'e> AS Produ1t( p."$stPr$1e AS /"$st Pr$1e/ #RO) Produ1t$on.Produ1t AS p -O+% Produ1t$on.Produ1tSub1&teor3 AS s

    O% p.Produ1tSub1&teor3+D : s.Produ1tSub1&teor3+D WERE s.=%&'e> "+

  • 7/26/2019 Crear procedimientos almacenados

    9/16

    55555555555555555555555555555555555555555555555555 555555555555555555Ro&d590 ,&1k( 98 9F.)ount&$n5900 S$ver( ?0 9H?.)ount&$n5900 S$ver( ?2 9H?....Ro&d590 ,&1k( ?8 9F.Ro&d590 ,&1k( 92 9F.

    I? ros4 &66e1ted4

    T!ese $te's 1&n be pur1!&sed 6or ess t!&n 00.00.

  • 7/26/2019 Crear procedimientos almacenados

    10/16

    Especi,car un valor de

    par1metropredeterminadoSQL Server 2008 R2

    Otras versiones

    Puede crear un procedimiento almacenado con par1metros opcionales especi,candoun valor predeterminado para los mismos" Al e0ecutar el procedimiento almacenado# seutili2ar1 el valor predeterminado si no se a especi,cado nin$7n otro"

    Es necesario especi,car valores predeterminados# &a 'ue el sistema devuelve un errorsi en el procedimiento almacenado no se especi,ca un valor predeterminado para unpar1metro & el pro$rama 'ue reali2a la llamada no proporciona nin$7n otro valor ale0ecutar el procedimiento"

    Si no se puede especi,car nin$7n valor predeterminado para el par1metro# siempre se

    puede especi,car /U!! & de0ar 'ue el procedimiento almacenado devuelva un mensa0epersonali2ado en caso de e0ecutarse sin 'ue el par1metro ten$a un valor"

    Nota

    Si el valor predeterminado es una cadena de caracteres con signos de puntuaci!n o espacios en blanc

    e)emplo, *xxx', deber# estar delimitado por comillas simples y rectas.

    E0emplos

    En el e0emplo si$uiente se crea el procedimiento usp+etSales4TDcon unpar1metro de entrada# GSalesPerson" /U!! se asi$na como valor predeterminadopara el par1metro & se utili2a en las instrucciones de control de errores para devolverun mensa0e de error personali2ado en los casos en 'ue se e0ecute el procedimientoalmacenado sin 'ue el par1metro GSalesPersonten$a un valor"

    http://void%280%29/http://void%280%29/
  • 7/26/2019 Crear procedimientos almacenados

    11/16

    Transact-S!

    USE AdventureWorks2008R2;GO+# O,-ECT_+D/S&es.uspGetS&esJTD/( /P/4 +S %OT %U"" DROP PROCEDURE S&es.uspGetS&esJTD;GO

    CREATE PROCEDURE S&es.uspGetS&esJTDS&esPerson nv&r1!&r904 : %U"" 55 %U"" de6&ut v&ueAS

    SET %OCOU%T O%;

    55 K&$d&te t!e S&esPerson p&r&'eter.+# S&esPerson +S %U"",EG+% PR+%T /ERROR7 Jou 'ust spe1$63 t!e &st n&'e o6 t!e s&es person./ RETUR%E%D55 Get t!e s&es 6or t!e spe1$6$ed s&es person &nd55 &ss$n $t to t!e output p&r&'eter.

    SE"ECT S&esJTD#RO) S&es.S&esPerson AS sp-O+% u'&nResour1es.vE'po3ee AS e O% e.,us$nessEnt$t3+D :sp.,us$nessEnt$t3+DWERE "&st%&'e : S&esPerson;RETUR%GO

    En el e0emplo si$uiente se e0ecuta el procedimiento almacenado" !a primerainstruccin e0ecuta el procedimiento almacenado sin especi,car nin$7n valor deentrada" Esto ace 'ue las instrucciones de control de errores del procedimiento

    almacenado devuelvan el mensa0e de error personali2ado" !a se$unda instruccinproporciona un valor de entrada & devuelve el con0unto de resultados esperado"

    55 Run t!e stored pro1edure $t!out spe1$63$n &n $nput v&ue.E*EC S&es.usp_GetS&esJTD;GO55 Run t!e stored pro1edure $t! &n $nput v&ue.E*EC S&es.usp_GetS&esJTD %/,3t!e/;GO

    En el e0emplo si$uiente se muestra el procedimiento my_proccon valorespredeterminados para los tres par1metros @rst# @second& @t!ird# as; como los

    valores 'ue se obtienen al e0ecutar el procedimiento almacenado con otros valores depar1metro%

    Transact-S!

    +# O,-ECT_+D/dbo.'3_pro1/( /P/4 +S %OT %U"" DROP PROCEDURE dbo.'3_pro1;GOCREATE PROCEDURE dbo.'3_pro1 6$rst $nt : %U""( 55 %U"" de6&ut v&ue

  • 7/26/2019 Crear procedimientos almacenados

    12/16

    se1ond $nt : 2( 55 De6&ut v&ue o6 2 t!$rd $nt : F 55 De6&ut v&ue o6 FAS

    SET %OCOU%T O%; SE"ECT 6$rst( se1ond( t!$rd;GO

    E*ECUTE dbo.'3_pro1; 55 %o p&r&'eters supp$edGO

    El con0unto de resultados es el si$uiente"

    %U"" 2 FE*ECUTE dbo.'3_pro1 I0( 20( F0;55 A p&r&'eters supp$edGO

    El con0unto de resultados es el si$uiente"

    I0 20 F0E*ECUTE dbo.'3_pro1 se1ond : 900; 55 On3 se1ond p&r&'eter supp$ed b3n&'eGO

    El con0unto de resultados es el si$uiente"

    %U"" 900 FE*ECUTE dbo.'3_pro1 ?0( t!$rd : 90 55 On3 6$rst &nd t!$rd p&r&'eters 55 &re supp$ed.

    El con0unto de resultados es el si$uiente"

    ?0 2 90

  • 7/26/2019 Crear procedimientos almacenados

    13/16

    E0ecutar procedimientosalmacenados (motor debase de datos)SQL Server 2008 R2Otras versiones

    Para e0ecutar un procedimiento almacenado# utilice la instruccin EHECUTE deTransact-S!" Tambi8n puede e0ecutar un procedimiento almacenado sin necesidad de

    utili2ar la palabra clave EHECUTE si el procedimiento almacenado es la primerainstruccin del lote"

    E0ecutar procedimientos almacenados del sistema!os procedimientos almacenados del sistema comien2an con los caracteres sp_" Sealmacenan ;sicamente en labase de datos de recursos# pero aparecen l$icamente enel es'uema sysde cada base de datos de,nida por el sistema & por el usuario en lainstancia de S! Server" !os procedimientos almacenados del sistema se puedene0ecutar desde cual'uier base de datos aun'ue el nombre del procedimientoalmacenado no sea completo" Un nombre completo 'ue no sea de es'uema puede serun nombre de una parte como sp_someproco un nombre de tres partescomo somedb""sp_someproccu&a se$unda parte# es decir# el nombre del es'uema#

    no est8 especi,cada"Se recomienda 'ue certi,'ue como de es'uema todos los nombres de procedimientosalmacenados del sistema con el nombre de es'uema sysa ,n de evitar con6ictos denombre" En el si$uiente e0emplo se muestra el m8todo recomendado para e0ecutar unprocedimiento almacenado del sistema"E*EC s3s.sp_!o;

    En los si$uientes e0emplos se muestran al$unos m8todos para e0ecutar procedimientosalmacenados del sistema compatibles con versiones anteriores"

    Nota

    Los siguientes m$todos para e)ecutar procedimientos almacenados del sistema se eliminar#n de las vestos m$todos en nuevos traba)os de desarrollo y tenga previsto modificar las aplicaciones que actual

    E*EC sp_!o;E*EC '&ster.dbo.sp_!o;E*EC '3d&t&b&se..sp_!o;E*EC dbo.sp_!o;E*EC '3d&t&b&se.dbo.sp_!o;

    3ntercalar bases de datos coincidentes

    http://void%280%29/https://technet.microsoft.com/es-es/library/ms190940(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms190940(v=sql.105).aspxhttp://void%280%29/https://technet.microsoft.com/es-es/library/ms190940(v=sql.105).aspx
  • 7/26/2019 Crear procedimientos almacenados

    14/16

    S! Server >??I usa la intercalacin de base de datos de llamada al comparar losnombres de los procedimientos del sistema" Por lo tanto# en la aplicacin# debe utili2aren todo momento las letras ma&7sculas & min7sculas correctas de los nombres de losprocedimientos del sistema" Por e0emplo# este cdi$o $enerar1 un error en el conte:tode una base de datos 'ue ten$a una intercalacin 'ue distin$a ma&7sculas demin7sculas"e@e1 SP_!e"P; 55 W$ 6&$ to resove be1&use SP_!e"P does not eLu&sp_!ep

    Utilice las vistas de cat1lo$o s&s"s&stem+ob0ects& s&s"s&stem+parametersparamostrar los nombres e:actos de los procedimientos almacenados del sistema"

    E0ecutar procedimientos almacenados e:tendidosdel sistema!os procedimientos almacenados e:tendidos del sistema comien2an con loscaracteres #p_" Se almacenan ;sicamente en la base de datos de recursos# peroaparecen l$icamente en el es'uema sysde cada base de datos de,nida por elsistema & por el usuario en la instancia de S! Server" En el si$uiente e0emplo semuestra el m8todo recomendado para e0ecutar un procedimiento almacenadoe:tendido del sistema"E*EC s3s.@p_subd$rs /17M/;

    E0ecutar procedimientos almacenados de,nidospor el usuarioAl e0ecutar un procedimiento almacenado de,nido por el usuario (&a sea en un lote odentro de un mdulo# como lo es una uncin o un procedimiento almacenado de,nidopor el usuario)# se recomienda certi,car el nombre de este procedimiento por lo menoscon el nombre del es'uema"En el si$uiente e0emplo se muestra el m8todo recomendado para e0ecutar unprocedimiento almacenado de,nido por el usuario"USE AdventureWorks2008R2;GOE*EC dbo.uspGetE'po3ee)&n&ers 90;

    - O bien -E*EC AdventureWorks2008R2.dbo.uspGetE'po3ee)&n&ers 90;GO

    Si se especi,ca un procedimiento almacenado no cali,cado de,nido por el usuario#

  • 7/26/2019 Crear procedimientos almacenados

    15/16

    Si un procedimiento almacenado creado por un usuario tiene el mismo nombre que un procedimientopor el usuario no llegar# a e)ecutarse si utiliza una referencia de nombre certificado que no sea de esq

    procedimientos almacenados &motor de base de datos'.

    Especi,car par1metrosEs posible proporcionar los valores de los par1metros si se escribe un procedimientoalmacenado 'ue los acepte"El valor suministrado debe ser una constante o una variable9 no puede especi,car unnombre de uncin como valor de par1metro" !as variables pueden ser de,nidas por elusuario o ser variables del sistema# como GGspid"En los si$uientes e0emplos se muestra cmo se pasan valores de par1metrosal uspetereUsedProduct3Ddel procedimiento almacenado" El procedimiento esperavalores para dos par1metros de entrada% un 3d" de producto & una eca" !os e0emplosmuestran cmo pasar par1metros como constantes & variables & tambi8n cmo usaruna variable para pasar el valor de una uncin"USE AdventureWorks2008R2;

    GO55 P&ss$n v&ues &s 1onst&nts.E*EC dbo.uspGetW!ereUsedProdu1t+D 8I( /20090229/;GO55 P&ss$n v&ues &s v&r$&bes.DEC"ARE Produ1t+D $nt( C!e1kD&te d&tet$'e;SET Produ1t+D : 8I;SET C!e1kD&te : /20090229/;E*EC dbo.uspGetW!ereUsedProdu1t+D Produ1t+D( C!e1kD&te;GO55 Tr3 to use & 6un1t$on &s & p&r&'eter v&ue.55 T!$s produ1es &n error 'ess&e.E*EC dbo.uspGetW!ereUsedProdu1t+D 8I( GETDATE4;GO

    55 P&ss$n t!e 6un1t$on v&ue &s & v&r$&be.DEC"ARE C!e1kD&te d&tet$'e;SET C!e1kD&te : GETDATE4;E*EC dbo.uspGetW!ereUsedProdu1t+D 8I( C!e1kD&te;GO

    Si desea especi,car los par1metros en un orden distinto al orden en 'ue est1nde,nidos en el procedimiento almacenado# debe ponerles nombre" Para obtener m1sinormacin# vea Especi,car un nombre de par1metro"Para especi,car 'ue un par1metro debe devolver un valor al pro$rama 'ue ace lallamada# use la palabra clave OUTPUT" Para obtener m1s inormacin# vea Especi,car ladireccin de un par1metro"

    Especi,car el orden de los par1metrosSi especi,ca los par1metros con el ormato @par$metro %value# puedeproporcionarlos en cual'uier orden" Tambi8n puede omitir los par1metros para los 'uese a&an especi,cado valores predeterminados" Si slo especi,ca un par1metro con elormato @par$metro %value# deber1 proporcionar todos los par1metros subsi$uientesdel mismo modo" Si no especi,ca los par1metros con el ormato @par$metro %value#deber1 especi,carlos en el orden 'ue se a se$uido en la instruccin CREATEPROCEDURE"

    https://technet.microsoft.com/es-es/library/ms190669(v=sql.105).aspxhttp://void%280%29/https://technet.microsoft.com/es-es/library/ms177436(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms191422(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms191422(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms190669(v=sql.105).aspxhttp://void%280%29/https://technet.microsoft.com/es-es/library/ms177436(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms191422(v=sql.105).aspxhttps://technet.microsoft.com/es-es/library/ms191422(v=sql.105).aspx
  • 7/26/2019 Crear procedimientos almacenados

    16/16

    Cuando e0ecute un procedimiento almacenado# el servidor reca2ar1 todos lospar1metros 'ue no se inclu&eron en la lista de par1metros durante la creacin delprocedimiento" /o se aceptar1 nin$7n par1metro pasado por reerencia (el nombre delpar1metro se pasa e:pl;citamente) si el nombre del par1metro no coincide"

    Usar valores predeterminados en los par1metros

    Aun'ue puede omitir los par1metros para los 'ue se a&an especi,cado valorespredeterminados# slo puede truncar la lista de par1metros" Por e0emplo# si en unprocedimiento almacenado a& cinco par1metros# puede omitir el cuarto & el 'uinto#pero no puede omitir el cuarto e incluir el 'uinto a menos 'ue suministre lospar1metros con el ormato @par$metro %value"El valor predeterminado de un par1metro# si se a de,nido para el par1metro delprocedimiento almacenado# se utili2a cuando%

    /o e:iste nin$7n valor especi,cado para el par1metro en el momento dee0ecutar el procedimiento almacenado"

    Se especi,ca la palabra clave DE.AU!T como valor para el par1metro"