Sie sind auf Seite 1von 19

Aqui te daria todos aquellos campos que NO son de tipo numerico

SELECT Micampo FROM MyTabla WHERE ISNUMERIC(Micampo) = 0

Entonces, se haría:

UPDATE MyTabla SET Micampo = 0


WHERE ISNUMERIC(Micampo) = 0

SUMAR el CAMPO y CONTAR cuantas veces se repite


SELECT
Codigo_item, Descripcion,
SUM((CASE WHEN Documento LIKE 'Nota' THEN Cantidad ELSE 0 END) AS CantidadN,
(COUNT(CASE WHEN Documento LIKE 'Nota' THEN Cantidad ELSE 0 END) AS Notas) ,
SUM((CASE WHEN Documento LIKE 'Factura' THEN Cantidad ELSE 0 END) AS
CantidadF, (COUNT(CASE WHEN Documento LIKE 'Factura' THEN Cantidad ELSE 0 END)AS
Facturas)

FROM
Kardex
WHERE
CATEGORIA = 'Tienda' and fecha BETWEEN '20170601' AND '20170630'
GROUP BY
CodigoProducto, DescripcionProducto;

 El management studio es solo el administrador gráfico del servidor.


 Ese no tiene nada que ver con la versión de SQL Server que tengas instalada.
 SQL Server 2012, soporta hasta 10 gigas de tamaño por base de datos.
 Una version enterprise, actualmente SQL Server 2016.
 Evaluar la posibilidad de llevar información histórica a otra base de datos con esa misma versión express, ya
que puedes crear muchas de datos.
 Recomiendo instalar versión 2012, 2014 o 2016, si va a instalar la edicion EXPRESS (gratis), pero con
ADVANCED EDITION.

Las versiones de SQL Server (son:

6.0 (la que salio al mercado)


6.5 (un poco mas estable)
7.0 (mas estable aun)
2000 (casi profesional, Reporting Services como un parche)
2005 (revoluciono el mercado, RS, AS, IS)
2008 (incluido el R2, master data services)
2012
2014
2016
2017 (Este es un CTP, que ya insalada sobre Red Hat, Linux)
Ediciones:

Express (la que tu tienes y es libre de cargo, free, pero version light, capacidad limitado POR base de datos)
Developer (para desarrolladores)
Standard
Enterprise (muy profesional, pero muy costosa)

Una guía:
https://www.microsoft.com/es-es/sql-server/sql-server-2016-comparison

Si la base de datos no es muy grande, por lo que se podria optar por la edicion STANDARD, ahora bien, si solo vas a
ALMACENAR DATOS y no vas a utilizar los demas servicios como REPORTING SERVICES, ANALISYS
SERVICES, INTEGRATION SERVICES, etc.

Entonces, "reparte" tus bases en "varias bases" dentro de tu version EXPRESS, no nos comentas si es la EXPRESS simple
o la ADVANCED.

Ejecuto esto para obtener información:

SELECT 'BuildClrVersion' ColumnName, SERVERPROPERTY('BuildClrVersion')


ColumnValue
UNION ALL
SELECT 'Collation', SERVERPROPERTY('Collation')
UNION ALL
SELECT 'CollationID', SERVERPROPERTY('CollationID')
UNION ALL
SELECT 'ComparisonStyle', SERVERPROPERTY('ComparisonStyle')
UNION ALL
SELECT 'ComputerNamePhysicalNetBIOS',
SERVERPROPERTY('ComputerNamePhysicalNetBIOS')
UNION ALL
SELECT 'Edition', SERVERPROPERTY('Edition')
UNION ALL
SELECT 'EditionID', SERVERPROPERTY('EditionID')
UNION ALL
SELECT 'EngineEdition', SERVERPROPERTY('EngineEdition')
UNION ALL
SELECT 'InstanceName', ISNULL(SERVERPROPERTY('InstanceName'), 'MSSQLSERVER')
UNION ALL
SELECT 'IsClustered', SERVERPROPERTY('IsClustered')
UNION ALL
SELECT 'IsFullTextInstalled', SERVERPROPERTY('IsFullTextInstalled')
UNION ALL
SELECT 'IsIntegratedSecurityOnly', SERVERPROPERTY('IsIntegratedSecurityOnly')
UNION ALL
SELECT 'IsSingleUser', SERVERPROPERTY('IsSingleUser')
UNION ALL
SELECT 'LCID', SERVERPROPERTY('LCID')
UNION ALL
SELECT 'LicenseType', SERVERPROPERTY('LicenseType')
UNION ALL
SELECT 'MachineName', SERVERPROPERTY('MachineName')
UNION ALL
SELECT 'NumLicenses', SERVERPROPERTY('NumLicenses')
UNION ALL
SELECT 'ProcessID', SERVERPROPERTY('ProcessID')
UNION ALL
SELECT 'ProductVersion', SERVERPROPERTY('ProductVersion')
UNION ALL
SELECT 'ProductLevel', SERVERPROPERTY('ProductLevel')
UNION ALL
SELECT 'ResourceLastUpdateDateTime', SERVERPROPERTY('ResourceLastUpdateDateTime')
UNION ALL
SELECT 'ResourceVersion', SERVERPROPERTY('ResourceVersion')
UNION ALL
SELECT 'ServerName', SERVERPROPERTY('ServerName')
UNION ALL
SELECT 'SqlCharSet', SERVERPROPERTY('SqlCharSet')
UNION ALL
SELECT 'SqlCharSetName', SERVERPROPERTY('SqlCharSetName')
UNION ALL
SELECT 'SqlSortOrder', SERVERPROPERTY('SqlSortOrder')
UNION ALL
SELECT 'SqlSortOrderName', SERVERPROPERTY('SqlSortOrderName')

SQL Server - Backup y restore


Si tu ya tienes una base en PRODUCCION y resulta que hiciste cambios de estructura de tablas, modificaste algunos
objetos (procedures, vistas, funciones, etc.), NO PUEDES hacer un BACKUP - RESTORE, ya que se perderian los datos
que tienes en tu base productiva.

Debes hacer un PLAN DE MIGRACION, en la cual, montes tu nueva base (con otro nombre), pases los datos actuales de
tu base productiva a tu nueva base, cambies el nombre a tu base productiva y renombres la base por la que vas a substituir.

No sin antes, haber hecho pruebas de QA

Como veras, no es tan trivial.

SQL Server - Problema en una tabla de la base


uenos días
Necesito solucionar este error que tengo en una tabla de mi base de dato:

Msg 824, Level 24, State 2, Line 1 SQL Server detected a logical consistency-based I/O error:...

¿Cómo solucionar este problema?

Gracias
Rta. …….DBCC CHECKTABLE
Exportar resultado de una Consulta a un archivo .SQL
Si estás usando autenticación integrada de windows puedes hacer esto:

bcp "Select IdProducto,NombreProducto From MYBD.dbo.Productos" queryout

"D:\Bases\myprods.txt" -T -c

Eso como verás te creará el archivo myprods.txt en la carpeta Bases en la unidad D:

Calcular cuantas personas tiene mas de 31 años en SQL Server

SELECT count(*) as Total FROM Tabla WHERE edad>31

OTRAS ANOTACIONES UTILES


Declare @NumOperador int, @FechaDesde datetime, @FechaHasta datetime
set @FechaDesde='2017-07-03 00:00:00.000'
set @FechaHasta='2017-07-12 00:00:00.000'
set @NumOperador=452127

SELECT NumOperador,
DiasDescansados = COUNT(DISTINCT FechaDescanso) FROM FechasDescansos
GROUP BY NumOperador;

Varios update en un mismo procedimiento almacenado


El problema al que me enfrento es el siguiente, quiero realizar varios update dentro de un procedimiento almacenado, pero
solo me ejecuta el primero. Os muestro el codigo para que vean como lo hago.

Rta. Es porque tienes varios begin y end, estos delimitan las instrucciones del procedimiento, solo deberías tener el begin
al principio y el end hasta el final. Tienes que quitar los que tienes en medio.

Se debe corregir esto aca: Y agrego, reemplaza tu instruccion IN(consulta) Por EXISTS

ALTER PROCEDURE [dbo].[TRAGSEGA_ORDENES] @fechadesde AS datetime AS

BEGIN
select COCOEX AS
'SUBEXPLOTACION',CONREG,COFEAC,EXESPE,OPTIPR,prdesc,OPTICS,santicos.csdesc as
'desc tipo',OPCOSA,sib_sibconsa.csdesc,CONUME,opdeta,coobse,COFECA,conumu
FROM DIL_CORDEN
INNER JOIN SIB_SIBEXPLO ON COCOEX=EXCOEX
left JOIN DIL_ORDPEN ON CONREG=OPNREG
left JOIN SANTIPRO ON opTIPR = PRPROC
left join santicos on optics = cstics AND optipr=csproc
left join sib_sibconsa on opcosa = cscodi AND opcoes=csespe
where COFECA >convert(datetime,@fechadesde,103) AND EXESPE IN
('01','03','04','23','24','25','82') AND SUBSTRING(CONREG,5,1)<>'3'

UNION
select COCOEX AS
'SUBEXPLOTACION',CONREG,COFEAC,EXESPE,OPTIPR,prdesc,OPTICS,santicos.csdesc as
'desc tipo',OPCOSA,sib_sibconsa.csdesc,CONUME,opdeta,coobse,COFECA,conumu
FROM DIL_CORDEN_o
INNER JOIN SIB_SIBEXPLO ON COCOEX=EXCOEX
left JOIN DIL_ORDPEN_o ON CONREG=OPNREG
left JOIN SANTIPRO ON opTIPR = PRPROC
left join santicos on optics = cstics AND optipr=csproc
left join sib_sibconsa on opcosa = cscodi AND opcoes=csespe
where COFECA >convert(datetime,@fechadesde,103) AND EXESPE IN
('01','03','04','23','24','25','82') AND SUBSTRING(CONREG,5,1)<>'3'
ORDER BY CONREG

END

BEGIN
UPDATE JSF_DIL_CORDEN
SET GRABADO = CONCAT('Grabado: ',CONVERT(varchar(10),getdate(),103))
where CONREG in (select distinct CONREG
FROM DIL_CORDEN
INNER JOIN SIB_SIBEXPLO ON COCOEX=EXCOEX
left JOIN DIL_ORDPEN ON CONREG=OPNREG
left JOIN SANTIPRO ON opTIPR = PRPROC
left join santicos on optics = cstics AND optipr=csproc
left join sib_sibconsa on opcosa = cscodi AND opcoes=csespe
where COFECA >convert(datetime,@fechadesde,103) AND EXESPE IN
('01','03','04','23','24','25','82') AND SUBSTRING(CONREG,5,1)<>'3'
)
/*Actualizo el campo isGrabada a 1*/
update JSF_DIL_CORDEN
set ISGRABADA = 1
where GRABADO in (select GRABADO from JSF_DIL_CORDEN where GRABADO like
'%Grabado%')
END

BEGIN
UPDATE JSF_DIL_CORDEN_O
SET GRABADO = CONCAT('Grabado: ',CONVERT(varchar(10),getdate(),103))
where CONREG in (select distinct CONREG
FROM DIL_CORDEN_O
INNER JOIN SIB_SIBEXPLO ON COCOEX=EXCOEX
left JOIN DIL_ORDPEN ON CONREG=OPNREG
left JOIN SANTIPRO ON opTIPR = PRPROC
left join santicos on optics = cstics AND optipr=csproc
left join sib_sibconsa on opcosa = cscodi AND opcoes=csespe
where COFECA >convert(datetime,@fechadesde,103) AND EXESPE IN
('01','03','04','23','24','25','82') AND SUBSTRING(CONREG,5,1)<>'3'
)
END

GO

Ayuda en consulta de dos tablas


SELECT *
FROM CLIENTE cte
WHERE NOT EXISTS(SELECT * FROM FACTURA fa WHERE fa.clienteid = cte.clientei
Quiere decir aca: Dame, todos los clientes que NO existan en factura

Que bueno que le funciono, el EXISTS (solo), es lo contrario del NOT EXISTS

Ya he instalado el SQL Server Express. Y ahora, ¿qué?


Debes encontrar la consola de administracion que se llama SQL SERVER MANAGEMENT STUDIO, ahora que si no la
tienes, pues bajala:

https://www.microsoft.com/es-mx/download/details.aspx?id=8961

Tambien deberas verificar que VERSION bajaste, recuerda que estamos en la 2016 y probando la 2017 NVE CTP

Saludos

puedes bajar el MANAGEMENT STUDIO por separado.

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

Error de restauración "La base está en uso"


Buenos días Foro
Espero no distraerlos con mi pregunta pero...... ¿Cómo puedo solucionar cuando quiero restaurar una base y que no
Responda LA BASE ESTA EN USO....???
Rta. Sacar a TODOS tus usuarios y dejarla en SINGLE_USER

ALTER DATABASE tubase


SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

¿Qué comando utilizo para volverla multisuario??


ALTER DATABASE tubase
SET MULTI_USER

Está bien programado el Procedure que expongo abajo??

ALTER procedure [dbo].[Restaura_CopiaSeg]


AS ALTER DATABASE Stock_SGB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
go

Restore Database Stock_SGB


From Disk ='E:\Cliente\SGB\Base_SGB\BaseSGB.Bak'
With Replace

ALTER DATABASE Stock_SGB


SET MULTI_USER;
go

Esto es lo que me hace falta para poder restaurar la base luego de una copia de seguridad

Pero me arroja este error

Mens. 3102, Nivel 16, Estado 1, Línea 2


RESTORE no puede procesar la base de datos 'Stock_SGB' porque está en uso en esta sesión. Se recomienda utilizar la
base de datos master para realizar esta operación.
Mens. 3013, Nivel 16, Estado 1, Línea 2
Fin anómalo de RESTORE DATABASE.

Si intentas hacerlo en la misma base, pues es como tratar de quitar el techo de una habitacion, estando parada en el.

USE MASTER
GO
.........................

ANOTACIONES ESPECIALES
declare @numOperador int, @FechaDesde datetime, @FechaHasta datetime
set @FechaDesde='2017-05-01 00:00:00.000'
set @FechaHasta='2017-06-30 00:00:00.000'
set @numOperador=0
Consulta SQL de fechas en rango inclusive
SELECT * FROM bitacora where id_sitio in ('1','2') and fecha between '2017-06-29 00:00:00' and '2017-07-01 23:59:59';
ANOTACIONES ESPECIALES
CREATE TABLE Origen(
Id_Origen int identity(1,1) primary key,
Id_Ciudad int not null,
Fecha datetime
FOREIGN KEY (Id_Ciudad) REFERENCES Ciudad(Id_ciudad))

Datos que le insertan:


INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (1,'2012-03-02 09:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (1,'2012-03-02 10:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (2,'2012-03-02 09:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (2,'2012-03-02 10:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (3,'2012-03-02 11:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (3,'2012-03-02 12:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (4,'2012-03-02 13:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (4,'2012-03-02 14:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (5,'2012-03-02 10:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (5,'2012-03-02 11:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (6,'2012-03-02 11:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (6,'2012-03-02 12:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (7,'2012-03-02 13:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (7,'2012-03-02 14:00:00')
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (8,'2012-03-02 10:00:00')*
INSERT INTO Origen(Id_Ciudad,Fecha) VALUES (8,'2012-03-02 11:00:00')*

SELECT V.Id_Vuelo as Numero_Vuelo, count(T.Id_Tripulacion) as Núm_Trip

FROM Vuelo V, Tripulacion T, Origen O

WHERE O.Fecha >= '20120101 00:00:00:001' AND O.Fecha <= '20121231 11:59:59:000'

and T.Id_Tripulacion = V.Id_Tripulacion

and V.Id_Origen = O.Id_Origen

GROUP BY V.Id_VueloO.Fecha

Las FECHAS o campos de tipo FECHA, siempre (todos) los motores de base de datos, las guardan en formato
NUMERICO, es por eso que se deben filtrar con >= o <=, sera mucho mas eficiente.
ANOTACIONES ESPECIALES - Eliminar duplicados con
DISTINCT

La palabra clave DISTINCT elimina las filas duplicadas de los resultados de una instrucción
SELECT. Si no se especifica DISTINCT, se devuelven todas las filas, incluidas las duplicadas. Por
ejemplo, si selecciona todos los Id. de producto de ProductInventory sin DISTINCT, se devolverán
1069 filas.

Con DISTINCT, puede eliminar los duplicados y ver sólo los Id. de producto que sean únicos.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT ProductID
FROM Production.ProductInventory ;
Esta consulta devuelve 432 filas.

Funciones SQL Server


http://www.1keydata.com/sql/sql-cast.html

CAST (expression AS [data type])

where [data type] is a valid data type in the RDBMS you are working with.

Examples

We use the following table for our examples.

Table Student_Score

Column Name Data Type

StudentID integer

First_Name char(20)

Score float

This table contains the following rows:


Table Student_Score

StudentID First_Name Score

1 Jenny 85.2

2 Bob 92.5

3 Alice 90

4 James 120.1

Example 1
SELECT First_Name, CAST(Score AS Integer) Int_Score FROM Student_Score;

Result:

First_Name Int_Score

Jenny 85

Bob 92

Alice 90

James 120

In Example 1, we use the CAST function to convert the Score column


from type FLOAT to INTEGER. When we do this, different RDMBS have
different rules on how to handle the numbers after the decimal point. In
the above example, the numbers after the decimal point are always
truncated. (truncar., recortar los decimals de los numeros flotantes
después del punto decimal para convertirlos a enteros.)

En el ejemplo 2, utilizamos la función CAST para convertir la columna


SCORE del tipo FLOAT a CHAR (3). Cuando hacemos esto, sólo
tomamos los tres primeros caracteres. Por lo tanto, si hay más de tres
caracteres, todo después de los tres primeros caracteres se descarta.
SELECT First_Name, CAST(Score AS char(3)) Char_Score FROM
Student_Score;

Result:

First_Name Char_Score
Jenny 85.
Bob 92.
Alice 90
James 120

ANOTACIONES ESPECIALES

-- Supongo que la ejecucion seria asi


EXECUTE usp_CantidadMateriaPrima 'codproducto', 'codigomateria'

-- Creamos el prodcedimiento
CREATE PROCEDURE usp_CantidadMateriaPrima
@CodProdId int,
@MateriaId int
AS
BEGIN
SET NOCOUNT ON
-- Valida que exista el PRODUCTO
IF NOT EXISTS(SELECT CodProdId FROM #CodProd WHERE CodProd = @CodProdID)
BEGIN
SELECT 'El producto indicado, no existe'
RETURN
END
-- Valida que exista la MATERIA PRIMA
IF NOT EXISTS(SELECT CodMat FROM #CodMat WHERE CodMat = @@MateriaId)
BEGIN
SELECT 'El codigo de la materia prima, no existe'
RETURN
END

SELECT PRO.Nombre AS Producto


, MP.Nombre as [Materia Prima]
, SUM(PM.Existencia) as [Total Existencia]
FROM #NroProductoxMat MTP INNER JOIN #CodProd PRO ON MTP.CodProd = PRO.CodProd
INNER JOIN #CodMat MP ON MP.CodMat = MTP.CodMat
GROUP BY PRO.Nombre, MP.Nombre
END
ENUMERAR DATOS
Create table #letras (letra char(1))
insert into #letras values('a'), ('b'), ('c'), ('d')
declare @consecutivo int = 1
while @consecutivo < 5
begin
select letra, @consecutivo from #letras
set @consecutivo = @consecutivo + 1
continue
end

O DE ESTA MANERA:
Declare @z Int
Set @z = 1
While (@z < 169)
Begin
Insert Into #tmp_DiasMes1 (UserId, dt_val)
Select Distinct @z, dt_val
From #tmp_DiasMes1
Where UserId <> @z
Set @z = @z + 1
End

Transformar campo binario a varchar (image to varchar)


drop table #tablax

create table #tablax (miimagen varbinary(MAX))


insert into #tablax values(0x21232F297A57A5A743894A0E4A801FC3)
select * from #tablax

SELECT CONVERT(varchar(max),miimagen,2), miimagen


from #tablax
Como sumar Horas y Minutos
create table #sumahoras
(campo1 varchar(8))
truncate table #sumahoras
insert into #sumahoras values ('08:00:00')
insert into #sumahoras values ('13:30:00')

select * from #sumahoras

select sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time,


campo1)))*60+ DATEPART(SS, CONVERT(time, campo1)))/60/60 as horas,
(sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time,
campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) - (sum((DATEPART(hh,
CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS,
CONVERT(time, campo1)))/60/60*60*60))/60 as minutos,
sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time,
campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) - (sum((DATEPART(hh,
CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS,
CONVERT(time, campo1)))/60/60*60*60) - ((sum((DATEPART(hh, CONVERT(time,
campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time,
campo1))) - (sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi,
CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time,
campo1)))/60/60*60*60))/60*60) as segundos,
sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time,
campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) as totalensegundos
from #sumahoras

O TAMBIEN:
drop table #Operador;

create table #Operador (operadorid int, hora time(0))

insert into #Operador values(451073, '04:00'),


(451073, '03:00'),
(451083, '05:00'),
(451083, '04:00'),
(900200, '08:00'),
(900200, '13:30')

-- Total por Segundos


select operadorid, sum( DATEPART(SECOND, hora) + 60 *
DATEPART(MINUTE, hora) + 3600 *
DATEPART(HOUR, hora))
from #Operador
group by operadorid

-- Total por Horas


;WITH w(e, mw) AS
(
SELECT operadorid, SUM(DATEDIFF(MINUTE, '0:00:00', hora))
FROM dbo.#Operador
-- WHERE ...
GROUP BY operadorid
)
SELECT operadorid = e,
hora = RTRIM(mw/60) + ':' + RIGHT('0' + RTRIM(mw%60),2)
FROM w;

ANOTACIONES ESPECIALES
Por cada INSERT, despues debes ejecutar CHECKPOINT

Segun el codigo, son muchos SELECT....INTO tutabla.....FROM....BLA,BLA,BLA

Por cada INSERT, despues debes ejecutar CHECKPOINT

Ahora, si se tarda, es seguramente por los indices, deberias verificar los indices de tus tablas fuente y crear los indices
necesarios en las tablas destino.

Muchas gracias! Te aviso como me ha ido.

SIMULAR DAÑO EN BASE DE DATOS


Alguien sabe como simular daño a una base de datos en sql server?
Tengo que hacer esto a una nueva base de datos para poder comprobar los backups que
se le hicieron a esta base de datos.

Si lo que quiere comprobar que sus backups son validos, es tan sencillo como:

RESTORE FROM <subackp.bak> VERIFYONLY


Si lo que quiere es RESTAURAR su base y comprobar que la base esta bien, entonces restaurela en OTRA BASE (nueva)
y compruebe que esa base queda bien.

CASE SQL - Eliminar un carácter


create table #QuitarGuion (dato varchar(50))
insert into #QuitarGuion values('Costa Rica'),
('Mexico - T'),
('Mexico - T'),
('Nicaragua - T'),
('Guatemala - T'),
('El Salvador - T'),
('Panama - T')

SELECT CASE WHEN CHARINDEX('-', dato)>0 THEN


SUBSTRING(dato, 1,CHARINDEX('-', dato)-1)
else dato end
FROM #QuitarGuion

SQL Server - Relaciones con suma


SELECT tb.Codigo, tb.Descripcion, SUM(ta.[Cantidad Vendida]) as CantidadVendida
from tablaa ta inner join tablab tb
on tb.codigo = ta.codigo
group by tb.Codigo, tb.Descripcion

Mas antiguo y mas reciente


SELECT top 1 [numero de orden], max[fecha de factura] as "Fecha factura"
FROM tutabla
group by [numero de orden]
order by 2 desc --- o asc, dependiendo

CONCATENA CAMPOS EN UNA CONSULTA


select concat('Curso de ',C.TITULO,', impartido por ',P.NOMBRE,' ',P.APELLIDOS) CURSOS
from CURSOS C, PROFESORES P
where C.ID_PROFE = P.ID_PROFE

DUPLICAR UNA TABLA


use BaseWebKardex
SELECT * INTO dbo.tblR_HLA_007_Repet FROM dbo.tblR_HLA_007

No se lleva las claes ni los constraints

Ahora,
Para duplicar una tabla, podemos hacer varias cosas, copiar sólo la estructura:

SELECT * Into DestinationTableName From SourceTableName Where 1 = 2


SELECT UNION

http://www.sql-server-helper.com/error-messages/msg-104.aspx

SELECT [FirstName] + [LastName] AS [FullName]


FROM [dbo].[Employees]
UNION
SELECT [FirstName] + [LastName] AS [FullName]
FROM [dbo].[Managers]
ORDER BY [LastName]

Dado que la columna LastName no forma parte de la salida, aunque


forma parte de una de las columnas de la lista SELECT, se encontrará el
siguiente error:
Servidor: Msg 104, Nivel 15, Estado 1, Línea 3 Los elementos
ORDER BY deben aparecer en la lista de selección si la instrucción
contiene un operador UNION.

Para evitar este error, simplemente quite la cláusula ORDER BY de su


sentencia SELECT. Si realmente necesita ordenarla por una columna en
SELECT [FirstName] + [LastName] AS [FullName], [LastName]
FROM [dbo].[Employees]
UNION
SELECT [FirstName] + [LastName] AS [FullName], [LastName]
FROM [dbo].[Managers]
ORDER BY [LastName]

Si no desea que la columna adicional en su salida, puede poner la


instrucción SELECT con el UNION en una sub-consulta, de la siguiente
manera:

SELECT [FullName]
FROM (
SELECT [FirstName] + [LastName] AS [FullName], [LastName]
FROM [dbo].[Employees]
UNION
SELECT [FirstName] + [LastName] AS [FullName], [LastName]
FROM [dbo].[Managers]) A
ORDER BY [LastName]
MENSAJES DE ERROR SQL SERVER - PÁGINA

http://www.sql-server-helper.com/error-messages/msg-104.aspx

Sena empleo Público

https://simo.cnsc.gov.co/#dashboardciudadano

scabino2017

Misena2017
ENLACES DE INTERES:

http://www.coomeva.com.co/publicaciones.php?id=32653

RE:SELECT campos llenos, no nulos. Not null


Select * from Categoria where idCategoria=2 and Not isnull(DescripcionCategoria)

Ya probe el select que indicas pero me sale:

Mens. 174, Nivel 15, Estado 1, Línea 1


La función isnull requiere al menos 2 argumentos.

Ahora, ojo:

Para hacer una descriminacion de tus campos con NULL, puedes hacerlo en el where.

WHER myCampo IS NOT NULL

Bueno queridos compañeros, mi experiencia es que para que esto funcione debemos tomar en cuenta que si hay
registros con valor nulo(.NULL.) lo correcto es:

Select * from tabla where !isNull(campo), cualquier duda mandame mas datos a mi
correo y con gusto te regreso la respuesta.

Das könnte Ihnen auch gefallen