Última actualización: 12 de octubre de 2005
S Q L B á s ic ico p a r a S q l S er v er 20 0 0 . Curso de formación interna.
Sql Básico para Sql Server 2000
TEMARIO
Notas Iniciales sobre curso.................................................................... curso........................................................................... .......33 Particularidades en Sql Server 2000............................................................4 Notas Iniciales.................................................................................................................................4 Lenguaje Lengua je SQL ....................................... ............................................................ .......................................... ......................................... ......................................... ............................4 .......4 1. Cláusula SELECT........................... SELECT...................................... ....................... ....................... ...................... ....................... ....................... ...................... ..................... ...................... ............... ... 4 2. Cláusula FROM.............................. FROM......................................... ...................... ....................... ....................... ...................... ....................... ....................... ..................... ...................... ............... ... 6 3. Cláusula INTO ...................... .................................. ....................... ....................... ....................... ...................... ....................... ....................... ..................... ..................... ......................11 ...........11 4. Cláusula WHERE........... WHERE ....................... ....................... ...................... ....................... ....................... ....................... ....................... ...................... ...................... ...................... ................ .....11 11
Otros.................... Otros ........................................ ......................................... ......................................... ......................................... ........................................... ........................................ .................. 16 Herramienta bcp ...................... ................................. ...................... ...................... ...................... ....................... ....................... ...................... ...................... ...................... ....................... .............. 16 Bulk Insert........... Insert ...................... ...................... ....................... ....................... ....................... ....................... ...................... ....................... ....................... ...................... ...................... ......................18 ...........18
Cambios básicos de Mba a Sql Server......................................................20 Tipos..................... Tipos ........................................... ........................................... .......................................... .......................................... ........................................... .................................... .............. 20 Creación de una cadena.................... cadena............................. ................. ................. ................. ................. ................. ................. ................. ................. ................. .............. ......20 20 Otros.................... Otros ........................................ ......................................... ......................................... ......................................... ........................................... ........................................ .................. 23
Curso de Formación interna
2
Sql Básico para Sql Server 2000
Notas Iniciales sobre curso Este curso va dirigido especialmente a traducir la sintaxis que se utilizaba en Multibase a Sql Server 2000. En el software cliente de sql server exitste una potente herramienta de consultas llamada Analizador de consultas de Sql Server ,
que se encuentra en Inicio-Programas-Microsoft Sql Server-Analizador de
consultas.
Curso de Formación interna
3
Sql Básico para Sql Server 2000
Particularidades en Sql Server 2000 Diversos aspectos relacionados con Sql Server y sus diferencias con Multibase
Notas Iniciales El modo de intercalación de la base de datos de Sql Server que se utiliza en Kewan es: Modem_Spanish_CS_AS En Kewan, en el servidor de Sql Server se activa el check de: distingue las minúsculas de las mayúsculas.
Lenguaje SQL La sintaxis para la instrucción SELECT consiste en varias cláusulas, la mayoría de las cuales son opcionales. Una instrucción SELECT debe incluir al menos una cláusula SELECT y una cláusula FROM. Las dos cláusulas identifican qué columna o columnas de datos recuperar y desde qué tabla o tablas recuperar los datos, respectivamente. Las instrucción SELECT consta de las siguientes cláusulas, las cuales deben ir en el orden que se ve a continuación: SELECT
INTO FROM
WHERE GROUP BY HAVING ORDER BY
1. Cláusula SELECT La cláusula SELECT consiste en una lista de selección y posiblemente algunos argumentos opcionales. La lista de selección es la lista de expresiones o columnas que se especifican en la cláusula SELECT
Curso de Formación interna
4
Sql Básico para Sql Server 2000
para indicar qué datos hay que devolver. Se describen en esta sección los argumentos opcionales y la lista de selección. 1.1 Argumentos
Se pueden utilizar los siguientes dos argumentos en la instrucción SELECT para controlar que filas se devuelven:
DISTINCT
Devuelve solamente filas únicas. Si la lista de selección contiene varias columnas, las
filas se considerarán únicas si los valores correspondientes en al menos una de las columnas son diferentes. Para que se dupliquen dos filas deben contener valores idénticos en cada columna.
TOP n [PERCENT]
Devuelve solamente las primeras filas del conjunto resultado. Si se
especifica PERCENT, solamente el primer porcentaje de las filas se devuelve. Cuando se utiliza PERCENT, debe estar entre 0 y 100. Si la consulta incluye una cláusula ORDER BY, las filas se ordenan primero y posteriormente se devuelve el porcentaje del conjunto resultado ordenado. SELECT FROM GO SELECT FROM GO SELECT FROM GO
DISTINCT au_fname,au_lname authors TOP 50 PERCENT au fname,au_lname authors TOP 5 au_fname,au_lname authors
1.2 Alias de columna: El uso de una columna alias en la lista de selección permite especificar la
cabecera de la columna que se desea que aparezca en el resultado. SELECT FROM GO
au_fname AS Apellidos ,au_lname AS Nombre authors
1.3 Funciones: COUNT(), MAX(), MIN(), SUM(), AVG()
Curso de Formación interna
5
Sql Básico para Sql Server 2000
2. Cláusula FROM Combinaciones internas
Generalmente, las combinaciones están basadas en las claves primarias y externa de las tablas implicadas, aunque no es necesario que tengan claves declaradas explícitamente. SELECT ‘Author’=RTRIM(au_lname) + ‘, ‘ + au_fname,‘Titulo’= title FROM authors AS A JOIN titleauthors AS TA ON A.au_id=TA.au_id --condiciones de la combinacion JOIN titles AS T ON T.title_id=TA.title_id --condiciones de la combinación WHERE A.state <> ‘CA’ ORDER BY 1
La operación del anterior ejemplo se denomina combinación equivalente (INNER JOIN ó JOIN), que significa que la condición que vincula las dos tablas está basada en la igualdad. Es la operación de combinación más habitual. Aunque la sintaxis ANSI JOIN (utiliza la palabra JOIN) es algo más larga, la sintaxis de JOIN explícita es más legible. No existe ninguna diferencia en rendimiento (las operaciones son las mismas).
Combinaciones Externas (outer join de multibase)
El JOIN es una buena solución para realizar una mezcla entre dos tablas, pero conlleva una pérdida de información, ya que si no existe el enlace entre las dos tablas no muestra las filas existentes de forma individual. Por ello, aparece el OUTER JOIN (combinación externa), que tiene el mismo significado que el JOIN pero con la particularidad de que permite mostrar las filas de la primera tabla que no estén relacionadas con la segunda, es decir, muestra todas las filas de la primera tabla, tengan o no correspondencia con la segunda.
LEFT OUTER JOIN
TablaA LEFT [OUTER] JOIN TablaB ON condición_combinación
Curso de Formación interna
6
Sql Básico para Sql Server 2000
LEFT OUTER JOIN devuelve todas las filas para las que existe una conexión entre TablaA y TablaB; además, devuelv todas las filas de TablaA para las que no existe una fila correspondiente en TablaB. En otras palabras, conserva las filas sin concordancia de TablaA. TablaA se llama a veces la tabla conservada. Al devolver las filas sin concordancia de TablaA, las columnas seleccionadas de TablaB se devuelven como NULL.
RIGHT OUTER JOIN
TablaA RIGHT [OUTER] JOIN TablaB ON condición_combinación RIGHT OUTER JOIN devuelve todas las filas para las que existe una conexión entre TablaA y TablaB; además, devuelv todas las filas de TablaB para las que no existe una fila correspondiente en TablaA. En otras palabras, conserva las filas sin concordancia de TablaB, y en este caso la TablaB es la tabla conservada. Al devolver las filas sin concordancia de TablaA, las columnas seleccionadas de TablaB se devuelven como NULL.
FULL OUTER JOIN
TablaA FULL [OUTER] JOIN TablaB ON condición_combinación FULL OUTER JOIN devuelve todas las filas para las que existe una conexión entre TablaA y TablaB; además, devuelve todas las filas de TablaA para las que no existe una fila correspondiente en TablaB, devolviendo todos los valores seleccionados desde TablaB como NULL. Ademas, devuelve todas las filas de TablaB para las que no existe una fila correspondiente en TablaA, devolviendo todos los valores seleccionados desde TablaA como NULL.FULL OUTER JOIN actúa como una combinación de LEFT JOIN y RIGHT JOIN.
Ejemplo 1: Multibase: SELECTdiagdate, diagcode, diagdesc, cacodesc, vcodvers, diagmain FROM diag, outer caco WHERE epis_key = $epis_key$ And diag.caco_key = caco.caco_key ORDER BY diagdate
Curso de Formación interna
7
Sql Básico para Sql Server 2000
Sql Server SELECT diagdate, diagcode, diagdesc, cacodesc, vcodvers, diagmain FROM diag LEFT JOIN caco ON diag.caco_key = caco.caco_key
WHERE epis_key = $epis_key$ ORDER BY diagdate
Ejemplo 2 MBA: SELECT appo.epis_key,appo.appostatcode,appo.pers_keypati, appostat.appostatdesc, book.diardate, pati.pati_hfn,perspati.perssur1,perspati.perssur2,perspati.persname,book.bookhini,book.bookhend,appo. appoharr,agen.agenname,agenproc.agenprocdesc,csta.cstadesclong,persmedi.perssur1,persmedi.perssur2 ,persmedi.persname,appofail.appofaildesc,apporend.apporenddesc,appo.appofailcode,appo.apporendcod e,btimetab.btimetabamou,btimetab.btimetabappointe,btimetab.btimetabhourinit,btimetab.btimetabhour_ end FROM book,agen,btimetab,appo,appostat,epis,pers perspati,pati,csta,bookproc,agenproc,Outer (cstahper,Outer pers persmedi), Outer apporend, Outer appofail
WHERE bookproc.bookprocorde = 1 AND csta.cent_key = 2 AND appo.appostatcode IN ('P','D') AND (book.diardate BETWEEN '01/01/2004' AND '02/03/2004') AND appo.appostatcode=appostat.appostatcode AND appo.epis_key=epis.epis_key AND book.agencode=agen.agencode AND book.agencode=btimetab.agencode AND book.btimetabcode=btimetab.btimetabcode AND appo.pers_keypati=perspati.pers_key AND appo.pers_keypati=pati.pers_key AND appo.book_key=book.book_key AND appo.csta_keymake=csta.csta_key AND bookproc.book_key=book.book_key AND bookproc.agenproc_key=agenproc.agenproc_key AND cstahper.pers_key=persmedi.pers_key AND appo.cstahper_keymake=cstahper.cstahper_key AND appo.apporendcode=apporend.apporendcode AND appo.appofailcode=appofail.appofailcode; Sql Server SELECT appo.epis_key,appo.appostatcode,appo.pers_keypati,appostat.appostatdesc,book.diardate, pati.pati_hfn,perspati.perssur1,perspati.perssur2,perspati.persname,book.bookhini,book.bookhend,
Curso de Formación interna
8
Sql Básico para Sql Server 2000
appo.appoharr,agen.agenname,agenproc.agenprocdesc,csta.cstadesclong,persmedi.perssur1,persmedi.pe rssur2, persmedi.persname,appofail.appofaildesc,apporend.apporenddesc,appo.appofailcode,appo.apporendcod e, btimetab.btimetabamou,btimetab.btimetabappointe,btimetab.btimetabhourinit,btimetab.btimetabhour_en d FROM book,agen,btimetab,appostat,epis,pers perspati,pati,csta,bookproc, agenproc,appo left join (cstahper left join pers as persmedi on cstahper.pers_key=persmedi.pers_key ) on appo.cstahper_keymake=cstahper.cstahper_key left join apporend on appo.apporendcode=apporend.apporendcode left join appofail on appo.appofailcode=appofail.appofailcode
WHERE bookproc.bookprocorde = 1 AND csta.cent_key = 69 AND appo.appostatcode IN ('P','D') AND (book.diardate BETWEEN '01/01/2004' AND '02/03/2004') AND appo.appostatcode=appostat.appostatcode AND appo.epis_key=epis.epis_key AND book.agencode=agen.agencode AND book.agencode=btimetab.agencode AND book.btimetabcode=btimetab.btimetabcode AND appo.pers_keypati=perspati.pers_key AND appo.pers_keypati=pati.pers_key AND appo.book_key=book.book_key AND appo.csta_keymake=csta.csta_key AND bookproc.book_key=book.book_key AND bookproc.agenproc_key=agenproc.agenproc_key;
Ejemplo 3 Multibase SELECT epis.epis_key, pers.perssur1, pers.perssur2, pers.persname, epis.episdatecrea, inpaadmi.inpaadmidesc, episcsta.episcstadate_end, d2.dashpartcval, d1.dashpartcval FROM inpa, epis, episcsta,episfirm, clip, pers, inpaadmi, outer (dash, docudocu, dashpart d1, dashpart d2) WHERE epis.episdatecrea>="$DESDE$" and epis.episdatecrea<="$HASTA$" and
inpa.epis_key=epis.epis_key and epis.epis_key=episfirm.epis_key and episfirm.episfirmmain='Y' and episfirm.firm_key=$FIRM_KEY$ and epis.clip_key=clip.clip_key and clip.pers_key=pers.pers_key and inpa.inpaadmicode=inpaadmi.inpaadmicode and epis.docu_key=docudocu.docu_keysour and dash.docu_key=docudocu.docu_keydest and dash.dash_key=d1.dash_key and d1.dtpa_key=1 and
Curso de Formación interna
9
Sql Básico para Sql Server 2000
dash.dash_key=d2.dash_key and d2.dtpa_key=2 and episcsta.epis_key = epis.epis_key and episcsta.epicstalast = 'Y' Sql Server: SELECT epis.epis_key, pers.perssur1, pers.perssur2, pers.persname, epis.episdatecrea, inpaadmi.inpaadmidesc, episcsta.episcstadate_end, d2.dashpartcval, d1.dashpartcval FROM inpa, episcsta,episfirm, clip, pers, inpaadmi, epis LEFT JOIN (((docudocu INNER JOIN dash ON dash.docu_key=docudocu.docu_keydest) INNER JOIN dashpart d1 ON dash.dash_key=d1.dash_key and d1.dtpa_key=1) INNER JOIN dashpart d2 ON dash.dash_key=d2.dash_key and d2.dtpa_key=2) ON epis.docu_key=docudocu.docu_keysour
WHERE epis.episdatecrea>='$DESDE$' and epis.episdatecrea<='$HASTA$' and inpa.epis_key=epis.epis_key and epis.epis_key=episfirm.epis_key and episfirm.episfirmmain='Y' and episfirm.firm_key=$firm_key$ and epis.clip_key=clip.clip_key and clip.pers_key=pers.pers_key and inpa.inpaadmicode=inpaadmi.inpaadmicode and episcsta.epis_key = epis.epis_key and episcsta.epicstalast = 'Y'
Ejemplo 4 Multibase select pers.persname, pers.perssur1, pers.perssur2, pers.persbirtdate, tsex.tsexdesc, pers.persidencod1, firm.firmname, addr.troacode || "/ " || addr.addrnamestre, addr.addrnumb,terr.terrdesc, addr.addrtel1, addr.addrtel2 from pers, tsex, outer (patifirm, firm), outer (addr, outer terr) where pers.pers_key=$PERS_KEY$ and pers.pers_key=patifirm.pers_key and patifirm.firm_key=firm.firm_key and pers.tsexcode=tsex.tsexcodeand pers.addrcode=addr.addrcode and addr.terr_key3=terr.terr_key Sql Server select pers.persname, pers.perssur1, pers.perssur2, pers.persbirtdate, tsex.tsexdesc, pers.persidencod1, firm.firmname, addr.troacode + '/ ' + addr.addrnamestre, addr.addrnumb,terr.terrdesc, addr.addrtel1,
Curso de Formación interna
10
Sql Básico para Sql Server 2000
addr.addrtel2 FROM tsex, pers LEFT JOIN (patifirm INNER JOIN firm ON patifirm.firm_key=firm.firm_key) ON pers.pers_key=patifirm.pers_key LEFT JOIN (addr LEFT JOIN terr ON addr.terr_key3=terr.terr_key) ON pers.addrcode=addr.addrcode WHERE pers.pers_key=$pers_ket$ and pers.tsexcode=tsex.tsexcode
3. Cláusula INTO Permite recuperar datos de una tabla o tablas y ubicar las filas resultado en una nueva tabla. La nueva tabla se crea automáticamente cuando se ejecuta la instrucción SELECT ... INTO y se defina según las columnas en la lista de selección. SELECT INTO Se puede utilizar SELECT ... INTO para seleccionar filas en una tabla temporal o en una tabla permanente. Para una tabla local temporal (que es visible solamente a la conexión actual o usuario) se debe incluir el símbolo (#) antes del nombre de la tabla. Para una tabla temporal global (que es visible a cualquier usuario) se deben incluir dos símbolos (##) antes del nombre de la tabla. Una tabla temporal se borra automáticamente después de que todos los usuarios que están utilizando la tabla se hayan desconectado de SQL Server. SELECT employee.fname,employee.lname,jobs.job_desc INTO emp_info FROM employee,jobs WHERE employee.job_id =jobs.job_id GO
4. Cláusula WHERE Se puede utilizar la cláusula WHERE para restringir las filas que se devuelven de una consulta según las condiciones de búsqueda especificadas. Operadores lógicos:
AND, OR y NOT
Curso de Formación interna
11
Sql Básico para Sql Server 2000
Operaciones:
Operación
Condición comprobada
=
Analiza la igualdad entre dos expresiones .
<>
Analiza si dos expresiones no son iguales.
!=
Analiza si dos expresiones no son iguales (igual que <>)
>
Analiza si una expresión es mayor que otra
>=
Analiza si una expresión es mayor o igual que otra
!>
Analiza si una expresión no es mayor que otra
<
Analiza si una expresión es menor que otra
<=
Analiza si una expresión es menor o igual que otra
!<
Analiza si una expresión no es menor que otra
Curso de Formación interna
12
Sql Básico para Sql Server 2000
Otras palabras claves
LIKE
Comodín
Busca
%
Cualquier cadena de cero o más caracteres.
_
Cualquier carácter único.
[]
Cualquier carácter único dentro del rango especificado (pe. [a-f]) o del conjunto espceficado (pe. [abcdef]).
[^]
Cualquier carácter único que no esté dentro del rango especificado (pe. [^a-f]) o del subconjunto especificado (pe. [^abcdef]).
Formato
Busca
LIKE ‘Mc%’
Todos los nombres que empiezan por las letras Mc (como McBadden).
LIKE ‘%inger’
Todos los nombres que terminen por inger (como Ringer y Stringer).
LIKE ‘%en%’
Todos los nombres que incluyan las letras en (como Bennet y Green).
LIKE ‘~heryl’
Todos los nombres que de seis letras que terminen por heryl (Sheryl).
LIKE ‘[CK]ars[eo]n’
Todos los nombres que empiecen por C ó K, lleven después ars, a continuación e ú o y terminen por n (como Carsen, Carson y Karson).
Curso de Formación interna
13
Sql Básico para Sql Server 2000
LIKE ‘[M-Z]inger’
Todos los nombres que terminen por inger y que empiecen por una única letra comprendida entre M y Z (como Ringer).
LIKE ‘M[^c]%’
Todos los nombres que empiecen por la letra M y cuya segunda letra no sea la c (como MacFaether).
ESCAPE
La palabra clave ESCAPE permite realizar coincidencia de patrones con los propios caracteres comodín tales como, %, y _. select * from msgs where msgsdesc like '%z_%' escape 'z' GO
BETWEEN
La palabra clave BETWEEN se utiliza siempre con AND y especifica un rango inclusivo para verificar una condición de búsqueda. La sintaxis es la siguiente: BETWEEN AND
SELECT FROM WHERE GO
price,title titles price BETWEEN 5.00 AND 25.00
IS NULL
La palabra clave IS NULL se utiliza en una condición de búsqueda para seleccionar filas que tienen un valor nulo en una columna especificada. SELECT FROM WHERE GO
title,notes titles notes IS NULL
Curso de Formación interna
14
Sql Básico para Sql Server 2000
IN
La palabra clave IN se utiliza en una condición de búsqueda para determinar si la expresión dada coincide con algún valor en una subconsulta o lista de valores <
expresión de comprobación>IN «subconsulta »
IN «lista de valores» SELECT FROM WHERE Manager","Designer") GO
job_id jobs job_desc IN ("Operations Manager","Marketing
EXISTS
La palabra clave EXISTS se utiliza para verificar la existencia de filas en la subconsulta. La sintaxis es la siguiente: EXISTS «subconsulta »
Si alguna fila satisface la subconsulta, se devuelve TRUE. SELECT FROM WHERE
au_fname,au_lname authors EXISTS (SELECT FROM WHERE
au_id titleauthor titleauthor.au_id =authors.au_id)
GO
Curso de Formación interna
15
Sql Básico para Sql Server 2000
Otros Herramienta bcp La herramienta bcp copia datos entre Microsoft® SQL Server™ 2000 y un archivo de datos con el formato especificado por el usuario. Sintaxis
bcp {[[database_name.][owner].]{table_name | view_name} | "query"} {in | out | queryout | format} data_file [-m max_errors] [-f format_file] [-e err_file] [-F first_row] [-L last_row] [-b batch_size] [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6] [-q] [-C code_page] [-t field_term] [-r row_term] [-i input_file] [-o output_file] [-a packet_size] [-S server_name[\instance_name]] [-U login_id] [-P password] [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"] database_name Es el nombre de la base de datos en la que reside la tabla o vista especificada. Si no se especifica, es la base de datos predeterminada para el usuario. Owner Es el nombre del propietario de la tabla o vista. El argumento owner es opcional si el usuario que realiza la copia masiva es propietario de la tabla o vista especificada. Si no se especifica el argumento owner y el usuario que realiza la copia masiva no es propietario de la tabla o de la vista especificada, Microsoft® SQL Server™ 2000 devuelve un mensaje de error y se cancela la operación de copia masiva. table_name Es el nombre de la tabla de destino cuando se copian datos en SQL Server (in), y de la tabla de origen cuando se copian datos desde SQL Server (out). view_name Es el nombre de la vista de destino cuando se copian datos en SQL Server (in), y de la vista de origen cuando se copian datos desde SQL Server (out). Sólo pueden utilizarse como vistas de destino aquellas vistas en las que todas las columnas hacen referencia a la misma tabla. Consulta in | out | queryout | format Especifica la dirección de la copia masiva. Con la opción in se realiza una copia desde un archivo a la tabla o a la vista de la base de datos. Con la opción out se realiza una copia desde la tabla o desde la vista de la base de datos a un archivo. Sólo se debe especificar queryout al realizar copias de datos masivas desde una consulta. Con la opción format se crea un archivo de formato basado en la opción especificada
Curso de Formación interna
16
Sql Básico para Sql Server 2000
(-n, -c, -w, -6 o -N) y en los delimitadores de tabla o vista. Si se utiliza format, también debe especificarse la opción -f. data_file Es la ruta de acceso completa del archivo de datos que se utiliza en la copia masiva de una tabla o de una vista desde, o hacia, un disco. Cuando se realiza una copia de datos masiva en SQL Server, el archivo de datos contiene los datos que deben copiarse en la tabla o en la vista especificada. Cuando se realiza una copia de datos masiva desde SQL Server, el archivo de datos contiene los datos copiados desde la tabla o desde la vista. La ruta de acceso puede contener de 1 a 255 caracteres. -t field_term Especifica el terminador del campo. El valor predeterminado es \t (carácter de tabulador). Utilice este parámetro para sustituir el terminador de campo predeterminado. -r row_term Especifica el terminador de la fila. El valor predeterminado es \n (carácter de nueva línea). Utilice este parámetro para sustituir el terminador de fila predeterminado. -S server_name[\instance_name] Especifica la instancia de SQL Server a la que se va a conectar. Especifique server_name para conectarse a la instancia predeterminada de SQL Server en ese servidor. Especifique server_name\instance_name para conectarse a una instancia con nombre de SQL Server 2000 en ese servidor. Si no se especifica ningún servidor, bcp se conecta a la instancia predeterminada de SQL Server en el equipo local. Esta opción es necesaria cuando se ejecuta bcp desde un equipo remoto conectado a la red. -U login_id Especifica el identificador de inicio de sesión utilizado para conectar a SQL Server. -P password Especifica la contraseña para el identificador de inicio de sesión. Si no se utiliza esta opción, bcp le pide una contraseña. Si se utiliza esta opción al final del símbolo del sistema sin especificar ninguna contraseña, bcp utiliza la contraseña predeterminada (NULL). -h "hint [,...n]" Especifica las sugerencias que deben utilizarse durante una copia de datos masiva en una tabla o en una vista. No se puede utilizar esta opción cuando se realicen copias de datos masivas en SQL Server 6.x ni en versiones anteriores. Sugerencia ORDER (column [ASC | DESC] [,...n])
Curso de Formación interna
Descripción Orden de los datos en el archivo de datos. El rendimiento de la copia masiva mejora si los datos cargados se ordenan según el índice agrupado de la tabla. Si el archivo de datos se ordena de forma distinta, o si no hay índice agrupado en la tabla, se pasará por alto la sugerencia ORDER. Los nombres de columna
17
Sql Básico para Sql Server 2000
facilitados deben ser columnas válidas en la tabla de destino. De forma predeterminada, bcp supone que el archivo de datos no está ordenado. TABLOCK
Se obtiene un bloqueo en la tabla durante la operación de copia masiva. Esta sugerencia mejora notablemente el rendimiento, dado que, al mantenerse el bloqueo únicamente durante la operación de copia masiva, se reduce la contención en la tabla por bloqueo. Una tabla puede ser cargada simultáneamente por varios clientes si no tiene índices y se especifica TABLOCK. De forma predeterminada, el comportamiento del bloqueo viene determinado por la opción de tabla table lock on bulk load (bloqueo de tabla en cargas masivas).
CHECK_CONSTRAINTS
Durante la operación de copia masiva, se comprueba la existencia de restricciones en la tabla de destino. De forma predeterminada, las restricciones se pasan por alto.
FIRE_TRIGGERS
Especificado con el argumento in, se ejecutarán todos los desencadenadores de inserción definidos en la tabla de destino durante la operación de copia masiva. Si no se especifica FIRE_TRIGGERS, no se ejecutará ningún desencadenador de inserción. FIRE_TRIGGERS se ignora con los argumentos out, queryout, y format.
Ejemplos: bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname” queryout c:\tmp\authors.txt -c -t "|" -r "\n" -S ERECTEO\KEWAN -U sa -P sa bcp "Northwind.Jane Doe.Jane's Orders" out "Jane's Orders.txt" -c -q -U"Jane Doe" -P"go dba" bcp "Northwind.[Jane Doe].[Jane's Orders]" out "Jane's Orders.txt" -c -U"Jane Doe" -P"go dba"
Bulk Insert Copia un archivo de datos a una tabla o vista de base de datos en un formato especificado por el usuario. Hay que tener en cuenta que la ruta del fichero que vayamos a insertar debe ser la ruta local del servidor de la Base de Datos
Curso de Formación interna
18
Sql Básico para Sql Server 2000
Sintaxis
BULK INSERT [ [ 'database_name'.] [ 'owner' ].] { 'table_name' FROM 'data_file' } [WITH ( [ BATCHSIZE [ = batch_size ] ] [ [ , ] CHECK_CONSTRAINTS ] [ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ] [ [ , ] DATAFILETYPE [ = { 'char' | 'native'| 'widechar' | 'widenative' } ] ] [ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ] [ [ , ] FIRSTROW [ = first_row ] ] [ [ , ] FIRE_TRIGGERS ] [ [ , ] FORMATFILE = 'format_file_path' ] [ [ , ] KEEPIDENTITY ] [ [ , ] KEEPNULLS ] [ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ] [ [ , ] LASTROW [ = last_row ] ] [ [ , ] MAXERRORS [ = max_errors ] ] [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] [ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ] [ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ] [ [ , ] TABLOCK ] ) ] FIELDTERMINATOR [ = 'field_terminator' ] Especifica el terminador de campo que se utilizará para los archivos de datos de tipo char y widechar. El valor predeterminado es \t (carácter de tabulador). ROWTERMINATOR [ = 'row_terminator' ] Especifica el terminador de fila que se va a utilizar para archivos de datos de tipo char y widechar. El valor predeterminado es \n (carácter de nueva línea).
Ejemplo: BULK INSERT Northwind.dbo.[Order Details] FROM 'f:\orders\lineitem.tbl' WITH ( FIELDTERMINATOR = '|', ROWTERMINATOR = ':\n' )
Curso de Formación interna
19
Sql Básico para Sql Server 2000
Cambios básicos de Mba a Sql Server Tipos Multibase
char(n)
Sql Server
char(n)
varchar(n)
integer
smallint
decimal(n,m)
int
(de -2-31 a 231 -1) 4 bytes
smallint
(de -2-15 a 215 -1) 2 bytes
decimal(n,m)
, si m<>0
float
, si m=0
time
datetime
(de 01/01/1753 al 21/12/9999, con precision de centesimas de segundo)
date
smalldatetime
(de 1 de enero de 1900 al 6 de junio de 2079, con precision de un minuto)
Creación de una cadena No se pueden concatenar campos de tipos diferentes, o sea, char con datetime, char con int… Para esto habrá que pasar los campos de tipo datetime e int a char.
Curso de Formación interna
20
Sql Básico para Sql Server 2000
Multibase
Sql Server
“
‘
||
+
LOWER ( character_expression ) , Devuelve una expresión de caracteres después de convertir a minúsculas los datos de
caracteres que estén en mayúsculas. UPPER ( character_expression ) , Devuelve una expresión de tipo carácter con datos de carácter en minúscula convertidos a
mayúscula. RTRIM ( character_expression ) , Devuelve una cadena de caracteres después de truncar todos los espacios en blanco a la derecha. SUBSTRING ( expression , start , length ) ,Devuelve parte de una expresión de caracteres, binaria, de texto o de imagen STR ( float_expression [ , length [ , decimal ] ] ) ,Devuelve datos de tipo carácter obtenidos a partir de datos numéricos CAST ( expression AS data_type ) , Convierte explícitamente una expresión de un tipo de
datos en otro
(se utiliza básicamente para pasar datos tipo int a char(n) ) CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) , Convierte explícitamente una expresión de un tipo de datos en otro (es una función similar a
Curso de Formación interna
21
Sql Básico para Sql Server 2000
cast. Aunque se utiliza básicamente para pasar datos tipo datetime a char(n) ) fecha
convert ( varchar, [col_datetime], 103 )
, convierte a dd/mm/yyyy
hora
convert ( varchar, [col_datetime], 108 )
, convierte a hh:mm:ss
today
getdate()
rowid
IDENTITY(int, 1,1)
, tipo de datos de Sql Server (Autonumérico)
Ejemplos: SELECT x = SUBSTRING('abcdef', 2, 3)
Resultado:
x: bcd
SELECT STR(123.45, 6, 1) GO Resultado: 123.5 (cadena de 6 posiciones) Multibase SELECT “Pago realizado con fecha “ || paymdone.paymdonedate || ” “ || firm.firmname FROM paymdone,firm WHERE paymdone.paymdone_key = $PADO and paymdone.firm_key = firm.firm_key Sql Server SELECT 'Pago realizado con fecha ' + rtrim(convert(char,paymdone.paymdonedate,103)) + ' ' + firm.firmname FROM paymdone,firm WHERE paymdone.paymdone_key = $PADO and paymdone.firm_key = firm.firm_key Multibase SELECT “S/FRA. No.” || invpnumb FROM invp WHERE invp.invp_key = $INVP Sql Server
Curso de Formación interna
22
Sql Básico para Sql Server 2000
SELECT 'S/FRA. No.' + Cast(invpnumb as varchar) FROM invp WHERE invp.invp_key = $INVP
Otros En las estaciones de gestión, las variables que están en mayúsculas, se pasan a minúsculas (pero sólo aquellas que se refieren a nombre de campos). Multibase SELECT persname, perssur1, perssur2 FROM pers WHERE pers.pers_key=$PERS_KEY$ Sql Server SELECT persname, perssur1, perssur2 FROM pers WHERE pers.pers_key=$pers_key$ NOTA: las variables que se pasan con ? no se cambian (pe. $?PERS_KEY$).
Curso de Formación interna
23