Web design and hosting, database, cloud and social media solutions that deliver business results
  • Soluciones de negocios
    • Automatización Robótica de Procesos
    • Software
    • Servicios de bases
      • Actualización del servidor y servicios de DBA
      • BI de energía
      • Integración de datos
      • Informes
    • Diseño web
      • Diseño de logo
      • Optimización del sitio web
      • Seguridad del sitio web
      • Traducción y localización web
      • Via de pago
      • Herramientas técnicas
    • Servicios en la nube
      • Servicios en la nube de Google
      • Servicios web de Amazon
      • microsoft azure
    • Medio Social
    • Microsoft Office
    • Hardware de TI
  • Academia
    • Nuestro entorno de prueba
    • Diseño de base de datos de aprendizaje
      • Los basicos
      • Obtener consulta abierta
      • Usando datos del servidor SQL
      • SQL Server 2008 para planes de mantenimiento
      • Usar fechas de SQL Server
      • Uso de las funciones de SQL Server
      • Uso de SQL Server Pivot-Unpivot
    • Aprendiendo Diseño Web
      • Creación del sistema de gestión de contenido de Ousia
      • ASP-NET
      • CSS
      • Usando JavaScript
    • Uso de las redes sociales
      • Cambiar una cuenta de Facebook de personal a empresa
      • Elegir dónde enfocar el esfuerzo de las redes sociales
      • Solicitar una revisión de Google
      • Tamaños de imagen de redes sociales
      • Uso de metadatos para configurar imágenes de redes sociales
    • Aprendizaje en la nube y servicios de TI
      • Error del programador de tareas 2147943645
      • Solicitud de SSL y generación de archivo PFX en OpenSSL Simple Steps
  • Acerca de
    • Blog
      • Actualización principal de Google, enero de 2020
      • Cierre de Internet de Hot Chilli
      • Cómo elegir el contenido de los folletos publicitarios de su sitio web
      • Construyendo una máquina de juego de nivel de entrada
      • Las cosas más molestas de los sitios web en Internet
      • Los 5 mejores sitios web para obtener gráficos vectoriales gratuitos
      • Prevención de estafas en línea
      • Skimmers de la gig economy
    • Carreras
      • Traductor inglés-español
      • Traductor inglés-japonés
    • Equipo
      • Ali Al Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • suneel kumar
      • Surya Mukkamala
    • Portafolio
عربى (AR)čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

Introducción a las funciones de SQL Server, sus beneficios e inconvenientes

Cualquier base de datos bien escrita tendrá una selección de funciones, la mayoría de las veces son útiles, pero cuando se usan en el contexto incorrecto pueden dañar el rendimiento.

¿Qué es una función SQL?

Usar funciones de SQL Server

Las funciones de SQL Server se pueden usar para devolver valores únicos (escalador) o tablas, usando rutinas T-SQL o CLR (tiempo de ejecución de lenguaje común) y, a menudo, realizando cálculos más complejos de los que le gustaría usar en el código general.

¿Cuándo es una buena idea utilizar una función en lugar de un código en línea?

Buen uso

Las funciones se pueden usar para reemplazar vistas (devolver una tabla), como una columna calculada en una tabla, realizar acciones de búsqueda consistentes o simplemente para modularizar su código, lo que puede ayudar a reducir los cambios necesarios.

Mal uso

Lo vemos todo el tiempo, pero las funciones no deben usarse para devolver datos de búsqueda en lugar de una combinación cuando se trata de grandes conjuntos de datos. Cada fila llamará a la misma función incluso si ya ha encontrado ese valor. En estos casos, use una combinación.

Ejemplos de funciones de escalador

Las funciones del escalador se utilizan mejor para realizar lógicas como el reformateo o los cálculos basados en filas, ya que por su naturaleza se llaman para cada fila, se pueden utilizar para buscar datos en otra tabla, pero en general, obtendrá un mejor rendimiento si utiliza una unión. Para ello, podemos consultar nuestra función get age en el siguiente enlace.

No tendría sentido almacenar la edad de una persona en el momento en que completó un formulario, ya que cuando los datos se consulten más tarde, estarán desactualizados. Una mejor opción sería capturar una fecha de nacimiento y calcularla sobre la marcha. En nuestra función agregamos un campo hasta, que se puede usar para retroceder un cálculo, o quizás más sombríamente, calcular la edad y el momento de la muerte (esta función se extendió para un contrato del NHS).

Más: Get Age

Example

CREATE FUNCTION [Dates].[GetAge](@Date DATETIME2,@Until DATETIME2) RETURNS INT AS BEGINIF @Until IS NULL SET @Until=CONVERT(DATE,GETDATE())DECLARE @Age INT=DATEDIFF(YEAR,@Date,@Until)+(CASE WHEN DATEPART(DAYOFYEAR,@Date)>(DATEPART(DAYOFYEAR,@Until)+(CASE WHEN dbo.GetLeapYear(@Date)=1 AND DATEPART(DAYOFYEAR,@Date)>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END)RETURN @AgeEND

Ejemplos de funciones de escalador

Para usar esto de una tabla ficticia, simplemente usaríamos esto, que proporcionaría la edad actual o la edad al morir.

Use in a select statement

SELECT [PersonID],[DateOfBirth],[dbo].[GetAge]([DateOfBirth],[DeceasedDate]) AgeAsFunction,--Simpler code to understand!DATEDIFF(YEAR,[DateOfBirth],[DeceasedDate])+(CASE WHEN DATEPART(DAYOFYEAR,[DateOfBirth])>(DATEPART(DAYOFYEAR,[DeceasedDate])+(CASE WHEN dbo.GetLeapYear([DateOfBirth])=1 AND DATEPART(DAYOFYEAR,[DateOfBirth])>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END) AgeAsScript,[DeceasedDate]FROM [Person]

Ejemplos de funciones de escalador

Ventajas : Consistente, modular, más compacto, potencialmente reduce el número de cambios.

Desventajas : para ver el código, debe buscar en la función

Aunque en general es útil, esta función también es extremadamente precisa, ya que utiliza una función de año bisiesto. No es determinista por naturaleza, por lo que nunca debe almacenarse como datos persistentes.

Ejemplos de columnas de tabla

Las columnas calculadas se pueden agregar como persistentes (cambia cuando los datos lo hacen) o no persistentes (calculadas cada vez que se selecciona la fila). Podemos ver dos formas en que los hemos utilizado aquí dentro de nuestro Sistema de gestión de contenido.

Nota : Los datos persistentes pueden ser más difíciles de lograr, ya que requieren que se cumpla un conjunto de restricciones.

No persistente: edad

Usando la función de edad como arriba, podemos agregar esto a una tabla y pasar valores de otras columnas. Luego, simplemente lo seleccionamos como una columna.

Add to a table

CREATE TABLE [Person]([PersonID] [int] IDENTITY(1,1) NOT NULL,[DateOfBirth] [datetime] NULL,[Age] AS ([dbo].[GetAge]([DateOfBirth],[DeceasedDate])),[DeceasedDate] [datetime] NULL)

Select Statement

SELECT [PersonID],[DateOfBirth],[Age] AgeAsColumn,--Even simpler code to understand!DATEDIFF(YEAR,[DateOfBirth],[DeceasedDate])+(CASE WHEN DATEPART(DAYOFYEAR,[DateOfBirth])>(DATEPART(DAYOFYEAR,[DeceasedDate])+(CASE WHEN dbo.GetLeapYear([DateOfBirth])=1 AND DATEPART(DAYOFYEAR,[DateOfBirth])>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END) AgeAsScript,[DeceasedDate]FROM [Person]

No persistente: edad

Ventajas : Consistente, modular

Desventajas : Ralentiza la velocidad de consulta si no es necesario.

Persistente: CSS minimizado

Tenemos una función que reduce el espacio necesario para CSS hasta en un 30%. Llamar a esto con regularidad ralentizaría la velocidad de selección de la tabla y, dado que los datos rara vez se actualizan, tenía sentido realizar cálculos en el momento de la inserción / actualización. Al crear la columna como una función, tampoco tenemos necesidad de realizar estas operaciones como un disparador.

Más: Preprocesador CSS en SQL

Add to a Table

CREATE TABLE CSS(CSSID INT IDENTITY(1,1) NOT NULL,CSSText NVARCHAR(MAX),CSSMin AS (ous.CSSProcessor([CSSText])) PERSISTED)

Persistente: CSS minimizado

Se puede seleccionar como una columna normal y los datos se almacenan en la tabla. También evita el uso de una declaración de reemplazo masiva que infla nuestro código.

Ventajas : Velocidad de selección consistente, modular y más rápida, ¡sin necesidad de disparador!

Desventajas : aumenta el espacio necesario para la mesa, reduce la velocidad de inserción

Reemplazo de una vista

Tendemos a no usar vistas, excepto cuando usamos regularmente las mismas combinaciones en varios lugares.

Incluso en estos casos, no hay ninguna razón por la que una función de tabla no se pueda utilizar de forma más eficaz. La tabla que hemos utilizado se puede encontrar en el enlace a continuación, y tenemos dos ejemplos de uso, uno a través de una función y el otro mediante una vista.

más: Uso de fechas de SQL Server

Create a function

CREATE FUNCTION Dates.GetCalender(@DateFrom DATETIME2,@DateTo DATETIME2,@Function INT) RETURNS @D TABLE (CalenderDate DATETIME2(7) NOT NULL PRIMARY KEY,CalenderCA INT NULL,CalenderCD INT NULL,WeekDayID INT NULL,WeekDayName VARCHAR(9) NULL,HolidayType NVARCHAR(100)) AS BEGININSERT INTO @DSELECT c.*,HolidayTypeFROM [Utilities].[Dates].[Calender] cLEFT JOIN Utilities.Dates.CalenderHolidays h ON h.CalenderDate=c.CalenderDate AND CalenderFunction=@FunctionWHERE c.CalenderDate BETWEEN @DateFrom AND @DateTo RETURNENDGO

Create a view

CREATE VIEW Dates.GetCalenderView ASSELECT c.CalenderDate, CalenderCA, CalenderCD, WeekDayID, WeekDayName,h.HolidayType,c.CalenderFunctionFROM (SELECT CalenderDate, CalenderCA, CalenderCD, WeekDayID, WeekDayName, CalenderFunction FROM [Utilities].[Dates].[Calender],(SELECT DISTINCT CalenderFunction FROM Dates.CalenderHolidays) x) cLEFT JOIN Utilities.Dates.CalenderHolidays h ON h.CalenderDate=c.CalenderDate AND h.CalenderFunction=c.CalenderFunction

Usage

SELECT * FROM Dates.GetCalender('2018-01-01','2018-12-31',0) --England & WalesSELECT * FROM Dates.GetCalender('2018-01-01','2018-12-31',1) --Scotland----OR----SELECT * FROM Dates.GetCalenderView WHERE CalenderDate BETWEEN '2018-01-01' AND '2018-12-31' AND CalenderFunction=0

Reemplazo de una vista

Beneficios : Compacto para llamar, devuelto con clave principal (perfecto para unir más), los parámetros se pueden usar antes en el código.

Desventajas : más código para construir, menos flexible

Usar en Aplicar uniones

Las funciones de tabla son excelentes para usar en Apply Joins, ya que los datos se pueden pasar fila por fila. Usamos nuestra función TextToRows para separar cadenas en SQL Server. En el siguiente ejemplo, usamos una aplicación doble para dividir los datos dos veces con diferentes delimitadores.

más: función de SQL Server que divide el texto en filas de datos

SQL Code

DECLARE @TestText TABLE(TextToSplit NVARCHAR(100))INSERT INTO @TestText SELECT 'Text,To,Tows:Split,One'INSERT INTO @TestText SELECT 'Text,To,Tows:Split,Two'SELECT t.TextToSplit,s1.WordInt,s1.WordStr,s2.WordInt,s2.WordStrFROM @TestText tOUTER APPLY dbo.TextToRows(':',TextToSplit) s1OUTER APPLY dbo.TextToRows(',',WordStr) s2

Further detail

Some of the functions we have written can be found below.

Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

Site Links

RSSLoginLink Política de cookiesmapa del sitio

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom

Partnered With

La configuración de este sitio está configurada para permitir todas las cookies. Éstos se pueden cambiar en nuestra página de configuración y política de cookies. Al continuar utilizando este sitio, usted acepta el uso de cookies.
Ousia Logo
Logout
Ousia CMS Loader