Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
14/06/14 about:blank about:blank 1/8 Modificando Datos Insertar Registro en una Tabla Cláusula INSERT El comando INSERT agrega una o más nuevas filas a una tabla. En un tratamiento simplificado, el comando INSERT toma la siguiente forma: INSERT [INTO] tabla_o_vista [(lista_de_columnas)] valores_de_datos INSERT trabaja tanto sobre tablas como sobre vistas (con algunas restricciones). Este comando hace que los valores de los datos (valores_de_datos) sean insertados como una o mas filas en la tabla o vista. La palabra clave INTO en un comando INSERT es opcional y solo se utiliza para clarificar el código. Valores por Defecto Inserta un registro en la tabla con todos los valores por defecto. Hace que la nueva fila contenga los valores predeterminados definidos para cada columna. INSERT INTO tabla DEFAULT VALUES Para que esto tenga sentido las columnas deberían tener algunas de las siguientes propiedades: Tiene una propiedad IDENTITY. Se usa el valor de identidad incremental siguiente. Tiene un valor predeterminado. Se usa el valor predeterminado de la columna. Tiene un tipo de datos timestamp. Se utiliza el valor actual de marca de hora. Acepta valores NULL. Se usa un valor NULL. 14/06/14 about:blank about:blank 2/8 Es una columna calculada. Se utiliza el valor calculado. Insertando datos parciales La lista de los nombres de columnas (lista_de_columnas), separadas por comas, se usan para especificar las columnas que recibirán los datos. Si no se indican columnas, todas las columnas de la tabla o vista recibirán datos. Si solo se indica una lista parcial de columnas, el resto de las columnas recibirán un valor nulo o el valor configurado por defecto para esa columna, en caso que lo tenga. Los valores ingresados deben coincidir con la lista de columnas. La cantidad de valores provistos debe ser igual a la cantidad de columnas indicadas en la lista de columnas, y el tipo de dato, precisión, y escala de cada valor debe coincidir con los de las columnas correspondientes. Cuando se define un comando INSERT, se puede usar la cláusula VALUES para especificar los valores de los datos para una fila o usar una subconsulta SELECT para especificar los valores para una o más columnas. Una cláusula VALUES permite especificar los valores para una fila de la tabla. Los valores son indicados a través de una lista de expresiones escalares separadas por comas. Estos valores deben ser implícitamente convertibles al tipo, precisión y escala de las columnas correspondientes. Si no se especifica la lista de columnas, los datos deben ser ingresados en el mismo orden que tiene en la definición de la tabla o vista. INSERT único de múltiples filas (Ver. 2008 R2) Con SQL 2008 es posible insertar múltiples filas o rows en una sentencia de INSERT. INSERT INTO Production.UnitMeasure VALUES (N'FT2',N'Square Feet ','20080923'), (N'Y',N'Yards','20080923'), (N'Y3',N'Cubic Yards','20080923'); GO Insertando registros con SELECT Se puede usar una subconsulta SELECT dentro de un comando INSERT para agregar datos a una tabla desdebv otra u otras tablas o vistas. Una subconsulta permite agregar más de una fila a la vez. Una subconsulta SELECT en un comando INSERT se utiliza para agregar subconjuntos de datos 14/06/14 about:blank about:blank 3/8 existentes a una tabla, mientras que la cláusula VALUES se usa para guardar datos nuevos en una tabla. Insertando registros con STORED PROCEDURES Se pueden insertar los resultados de la ejecución de un procedimiento almacenado directo en una tabla. La estructura de la tabla debe coincidir con el resultado que arroja el STORED PROCEDURE. Para realizar esta operación es necesario utilizar la sentencia EXECUTE o EXEC Modificar Datos de uno o varios Registros Cláusula UPDATE Una vez que se crean las tablas y que se ingresan datos, cambiar y actualizar los datos se convierte en una tarea de mantenimiento diario SQL Server provee varios métodos para cambiar datos en una tabla existente. Estos procedimientos se pueden tanto a tablas como a vistas (con algunas restricciones) El comando UPDATE puede cambiar datos en una columna simple, en grupos de columnas, o en todas las columnas de una tabla o vista. Un comando UPDATE que referencia a una tabla o una vista puede cambiar los datos en sólo una tabla base por vez. Una actualización será exitosa sólo si el nuevo valor es compatible con el tipo de datos de la columna y cumple con todas las restricciones asociadas a esta. UPDATE tabla SET campo1 = valor WHERE condición SET indica que columna será actualizada y los nuevos valores que se guardarán. Los valores en las columnas indicadas serán actualizados con los valores provistos en la cláusula SET en todas las filas que cumplan con la condición de búsqueda especificada en la cláusula WHERE. Si no se especifica la cláusula WHERE, todas las columnas serán actualizadas. 14/06/14 about:blank about:blank 4/8 Modificaciones basadas en datos de otras tablas Se puede usar la cláusula FROM para traer datos desde una o más tablas o vistas para actualizar la tabla. USE Pubs UPDATE NuevosLibros SET Precio = Titulos.Precio FROM NuevosLibros JOIN Titulos ON NuevosLibros.LibroTitulo = Titulos.Titulo Los resultados de una instrucción UPDATE están sin definir si la instrucción incluye una cláusula FROM que no se especifica de manera que sólo haya un valor disponible para cada caso de columna que se actualice, es decir, si la instrucción UPDATE no es determinista. Borrar uno o varios Registros Cláusula DELETE Elimina los registros de una tabla o vista que satisfagan la cláusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algún campo en concreto. Su sintaxis es: DELETE FROM Tabla WHERE criterio DELETE puede eliminar uno o varios registros. TRUNCATE TABLE El comando TRUNCATE TABLE es una forma rápida y no registrada de eliminar todas las filas en una tabla. Este método es casi siempre más rápido que un comando DELETE sin condiciones, porque DELETE graba un registro de transacciones por cada fila eliminada, mientras que TRUNCATE TABLE solo graba registro de liberación de las páginas de datos completas. El comando TRUNCATE TABLE inmediatamente libera el espacio ocupado por los datos de la tabla e índices. 14/06/14 about:blank about:blank 5/8 También se liberan las páginas de distribución de todos los índices. Como en el caso del comando DELETE, la definición de la tabla se mantiene en la base de datos después que se aplica un comando TRUNCATE TABLE (incluidos sus índices y objetos asociados). Para eliminar la definición de la tabla se debe usar el comando DROP TABLE. Borrando registros basados en otras tablas DELETE tabla_o_vista FROM tabla_fuente WHERE condicion_de_busqueda En tabla_o_vista se colocan el nombre de la tabla o vista en que serán eliminadas las filas. Serán eliminadas todas las filas que cumplan con la condición de búsqueda especificada en la cláusula WHERE. Si esta no se indica, se eliminarán todas las filas de la tabla o vista. La cláusula FROM indica tablas, vistas o combinaciones adicionales que se pueden usar en el predicado de condición de la cláusula WHERE. No se borran las filas de las tablas indicadas en la cláusula FROM, sino sólo de la especificada en la cláusula DELETE. Sentencia MERGE (Versión 2008 R2) Introducción Realiza operaciones de inserción, actualización o eliminación en una tabla de destino según los resultados de una combinación con una tabla de origen. Por ejemplo, se puede sincronizar dos tablas insertando, actualizando o eliminando las filas de una tabla según las diferencias que se encuentren en la otra. Esta sentencia simplifica las actualizaciones de tablas por ejemplo en un Datawarehouse. Desde el punto de vista de performance MERGE es más óptimo que los correspondientes UPDATE/DELETE/INSERT ya que mediante un solo plan de ejecución se pueden realizar las operaciones que modifiquen, inserteno eliminen datos. Argumentos más utilizados en la sentencia MERGE target_table: Es la tabla o la vista con la que las filas de datos de <table_source> se hacen coincidir según la <clause_search_condition>. target_table es el destino de 14/06/14 about:blank about:blank 6/8 las operaciones de inserción, actualización o eliminación que las cláusulas WHEN de la instrucción MERGE especifican. Si target_table es una vista, cualquier acción con ella debe satisfacer las condiciones para actualizar las vistas. target_table no puede ser una tabla remota. target_table no puede tener ninguna regla definida. [ AS ] table_alias: Es un nombre alternativo que se utiliza para hacer referencia a una tabla. USING <table_source>: Especifica el origen de datos que se hace coincidir con las filas de datos en target_tablesegún <merge_searchcondition>. El resultado de esta coincidencia dicta las acciones que tomarán las cláusulas WHEN de la instrucción MERGE. <table_source> puede ser una tabla remota o una tabla derivada que tengan acceso a las tablas remotas.<table_source> puede ser una tabla derivada que use el constructor convalores de tabla de Transact-SQL para construir una tabla especificando varias filas. ON <merge_search_condition>: Especifica las condiciones en las que <table_source> se combina con target_table para determinar dónde coinciden. WHEN MATCHED THEN <merge_matched>Especifica que todas las filas de target_table que coinciden con las filas que devuelve <table_source> ON <merge_search_condition> y que satisfacen alguna condición de búsqueda adicional se actualizan o eliminan según la cláusula <merge_matched>. La instrucción MERGE puede tener a lo sumo dos cláusulas WHEN MATCHED. Si se especifican dos cláusulas, la primera debe ir acompañada de una cláusula AND <search_condition>. Para una fila determinada, la segunda cláusula WHEN MATCHED se aplica solamente si no se aplica la primera. Si hay dos cláusulas WHEN MATCHED, una debe especificar una acción UPDATE y la otra una acción DELETE. Si se especifica UPDATE en la cláusula <merge_matched> y más de una fila de <table_source> coincide con una fila en target_table según la <merge_search_condition>, SQL Server devuelve un error. La instrucción MERGE no puede actualizar la misma fila más de una vez, ni actualizar o eliminar la misma fila. WHEN NOT MATCHED [ BY TARGET ] THEN <merge_not_matched>Especifica que una fila se inserta en target_table para cada fila que devuelve <table_source> ON <merge_search_condition> que no coincide con una fila de target_table, pero satisface una condición de búsqueda adicional, si está presente. La cláusula <merge_not_matched> especifica los valores que insertar. La instrucción MERGE puede tener solamente una cláusula WHEN NOT MATCHED. WHEN NOT MATCHED BY SOURCE THEN <merge_matched>Especifica que todas las filas de target_table que no coinciden con las filas que devuelve <table_source> ON <merge_search_condition> y que satisfacen alguna condición de búsqueda adicional se actualizan o eliminan según la cláusula <merge_matched>. La instrucción MERGE puede tener a lo sumo dos cláusulas WHEN NOT MATCHED BY SOURCE. Si se especifican dos cláusulas, la primera debe ir acompañada de una cláusula AND <clause_search_condition>. Para una fila determinada, la segunda cláusula WHEN NOT MATCHED BY SOURCE se aplica solamente si no se aplica la primera. Si hay dos cláusulas WHEN NOT MATCHED BY SOURCE, una debe especificar una acción UPDATE y la otra una acción DELETE. Solamente se puede hacer referencia a las columnas de la tabla de destino en <clause_search_condition>. 14/06/14 about:blank about:blank 7/8 AND <clause_search_condition>Especifica cualquier condición de búsqueda válida. Para obtener más información, vea Condiciones de búsqueda (Transact-SQL). Si se especifica READPAST con WHEN NOT MATCHED [ BY TARGET ] THEN INSERT, pueden producirse operaciones INSERT que infrinjan las restricciones UNIQUE. <output_clause>Devuelve una fila para cada fila de target_table que se actualiza, inserta o elimina, en ningún orden en concreto. Para obtener más información acerca de los argumentos de esta cláusula, vea OUTPUT (cláusula de Transact-SQL). <merge_matched>Especifica la acción de actualización o eliminación que se aplica a todas las filas de target_table que no coinciden con las filas que devuelve <table_source> ON <merge_search_condition>, y que satisfacen cualquier condición de búsqueda adicional. UPDATE SET <set_clause>Especifica la lista de nombres de columna o de variable que se van a actualizar en la tabla de destino y los valores con los que se actualizan. DELETEEspecifica que las filas coincidentes de las filas de target_table se eliminan. <merge_not_matched>Especifica los valores que insertar en la tabla de destino. (column_list )Es una lista de una o varias columnas de la tabla de destino en la que insertar los datos. Las columnas se deben especificar como un nombre de una sola parte o, de lo contrario, se producirá un error en la instrucción MERGE. column_list se debe agregar entre paréntesis y delimitarse mediante comas.VALUES ( values_list ) <searchcondition>Especifica las condiciones de búsqueda utilizadas para especificar <merge_search_condition> o <clause_search_condition>. Ejemplo de MERGE: Datos las siguientes dos tablas Table1 y Table2: MERGE dbo.Table1 AS Target USING (SELECT codigo, nombre FROM dbo.Table2) AS Source ON (Target.codigo = Source.codigo) 14/06/14 about:blank about:blank 8/8 WHEN MATCHED THEN UPDATE SET Target.nombre = Source.nombre WHEN NOT MATCHED BY TARGET THEN INSERT (codigo, nombre ) VALUES (Source.codigo,Source.nombre); WHEN NOT MATCHED BY SOURCE THEN DELETE; Este script SQL lo que hace es comparar Table1 con Table2. En el caso que los campos codigos coinciden hace un UPDATE del campo nombre de Table2 sobre el campo nombre de Table1. En el caso que hay registros de Table2 que no existen en Table1 (osea que no hacen MATCH) los inserta en Table1. Y por ultimo si hay registros en Table1 que no existen en Table2 los borra de Table1. El resultado de la operación quedaria:
Compartir