Suponiendo una tabla con esta estructura:
fecha Respuesta
2012/02/01 XX:01 a
2012/02/01 XX:01 b
2012/02/01 XX:01 a
2012/02/01 XX:01 b
...
...
..
Muchos registros
...
...
Y suponiendo que no hay registros en la hora 2 respuesta b y no hay hora 3 respuesta a
Queremos lo siguiente como resultado del Store procedure:
Hora Respuesta Cantidad
1 a 10
1 b 15
2 a 4
2 b 0 <-- fila autocompletada porque no hay registros
3 a 0 <-- fila autocompletada porque no hay registros
3 b 6
El procedimiento para hacer una consulta con la cual pueda obtener un reporte por el conteo de filas, y que las horas que no existan en la bd se autocompleten este sería el query:
DECLARE @minHour INT
DECLARE @maxHour INT
DECLARE @DATEFROM DATETIME
SET @DATEFROM = '2013-09-15 00:00:56.330'
DECLARE @DATETO DATETIME
SET @DATETO = '2013-09-15 23:59:56.330'
SELECT TOP 1 @minHour = DATEPART(hh,FechaAAnalizar) FROM TablaReporte OPE
WHERE OPE.FechaAAnalizar > @DATEFROM
and OPE.FechaAAnalizar < @DATETO
GROUP BY DATEPART(hh,FechaAAnalizar)
ORDER BY DATEPART(hh,FechaAAnalizar) ASC
SELECT TOP 1 @maxHour = DATEPART(hh,FechaAAnalizar) FROM TablaReporte OPE
WHERE OPE.FechaAAnalizar > @DATEFROM
and OPE.FechaAAnalizar < @DATETO
GROUP BY DATEPART(hh,FechaAAnalizar)
ORDER BY DATEPART(hh,FechaAAnalizar) DESC
--SELECT DATEPART(hh,FechaAAnalizar), idTipoDeRespuesta, count(1) FROM TablaReporte OPE
--WHERE OPE.FechaAAnalizar > @DATEFROM
--and OPE.FechaAAnalizar < @DATETO
--GROUP BY DATEPART(hh,FechaAAnalizar), idTipoDeRespuesta
--ORDER BY DATEPART(hh,FechaAAnalizar), idTipoDeRespuesta
IF OBJECT_ID('tempdb..#tableHours') IS NOT NULL DROP TABLE #tableHours
;WITH CTE as
(SELECT 1 i UNION ALL
SELECT i+1 i FROM CTE WHERE i < 5)
SELECT DATEPART(HH, DATEADD(HH, @minHour + i, @DATETO)) 'hour' INTO #tableHours from CTE
IF OBJECT_ID('tempdb..#tableTypes') IS NOT NULL DROP TABLE #tableTypes
SELECT idTipoDeRespuesta 'type' INTO #tableTypes FROM TablaReporte OPE
WHERE OPE.FechaAAnalizar > @DATEFROM
and OPE.FechaAAnalizar < @DATETO
GROUP BY idTipoDeRespuesta
--test combinaciones tipos con horas
/*
SELECT [hour], [type] FROM #tableHours, #tableTypes
ORDER BY [hour], [type]
*/
SELECT * FROM
(
--Tabla de datos reales
SELECT DATEPART(hh,FechaAAnalizar) 'hour', idTipoDeRespuesta 'type', count(1) 'Value' FROM TablaReporte OPE
WHERE OPE.FechaAAnalizar > @DATEFROM
and OPE.FechaAAnalizar < @DATETO
GROUP BY DATEPART(hh,FechaAAnalizar), idTipoDeRespuesta
UNION
--Agregar combinaciones que no se encuentren en los datos reales
SELECT [hour], [type] , 0 FROM
(
SELECT [hour], [type] FROM #tableHours, #tableTypes
) AS Combinaciones
WHERE CAST([hour] AS VARCHAR(30)) + CAST([type] AS VARCHAR(30)) NOT IN
(
SELECT CAST(DATEPART(hh,FechaAAnalizar) AS VARCHAR(30)) + CAST(idTipoDeRespuesta AS VARCHAR(30)) FROM TablaReporte OPE
WHERE OPE.FechaAAnalizar > @DATEFROM
and OPE.FechaAAnalizar < @DATETO
GROUP BY DATEPART(hh,FechaAAnalizar), idTipoDeRespuesta
)
) AS ResultFinal
ORDER BY 'hour', 'type'
Sean felices! :) Y siéntanse libres de opinar ;)
A aquel que se ha "matado" encontrando la solución. Le doy las gracias mediante este blog. Y lo que aprendí de él, lo comparto con todos.
Busca lo que quieras
Mostrando entradas con la etiqueta Store Procedures. Mostrar todas las entradas
Mostrando entradas con la etiqueta Store Procedures. Mostrar todas las entradas
Eliminar todos los objetos de una base de datos de SQL SERVER
Este es el código tomado de stackoverflow... muchas gracias stackoverflow.
/* Drop all non-system stored procs */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])
WHILE @name is not null
BEGIN
SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Procedure: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all views */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped View: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all functions */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Function: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all Foreign Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
WHILE @name is not null
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
EXEC (@SQL)
PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all Primary Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint is not null
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
EXEC (@SQL)
PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all tables */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Table: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
Sean felices! :) Y siéntanse libres de opinar ;)
/* Drop all non-system stored procs */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])
WHILE @name is not null
BEGIN
SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Procedure: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all views */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped View: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all functions */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Function: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all Foreign Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
WHILE @name is not null
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
EXEC (@SQL)
PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all Primary Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint is not null
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
EXEC (@SQL)
PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all tables */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Table: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
Sean felices! :) Y siéntanse libres de opinar ;)
Numero aleatorio con sql server con mínimo y máximo
Gracias a stackoverflow, aquí dejo
DECLARE @maxval TINYINT, @minval TINYINT
select @maxval=24,@minval=5
SELECT CAST(((@maxval + 1) - @minval) *
RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)
Sean felices! :) Y siéntanse libres de opinar ;)
DECLARE @maxval TINYINT, @minval TINYINT
select @maxval=24,@minval=5
SELECT CAST(((@maxval + 1) - @minval) *
RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)
Sean felices! :) Y siéntanse libres de opinar ;)
Crear tabla temporal desde select en sql server
Esta es la manera de lograr crear una tabla temporal desde un select.
select campo1, campo2, campo3
into #tablatemporal
from mitablanormalorigen
where ........
Sean felices! :) Y siéntanse libres de opinar ;)
Obtener únicamente fecha de datetime en SQL Server
Esta es la consulta:
SELECT CONVERT(VARCHAR(10),DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())), 111) 'dia'
Espero les sirva.
Sean felices! :) Y siéntanse libres de opinar ;)
SELECT CONVERT(VARCHAR(10),DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())), 111) 'dia'
Espero les sirva.
Sean felices! :) Y siéntanse libres de opinar ;)
UPDATE con Order by en sql server
Aquí les coloco un ejemplo de como hacer un update con order by.
Gracias a stackoverflow:
;WITH auxtable AS
(
SELECT *, ROW_NUMBER() OVER( ORDER BY len(buscar) DESC ) as 'posicion'
FROM tmpreemplazar
)
UPDATE auxtable
SET orden = posicion;
Sean felices! :) Y siéntanse libres de opinar ;)
Gracias a stackoverflow:
;WITH auxtable AS
(
SELECT *, ROW_NUMBER() OVER( ORDER BY len(buscar) DESC ) as 'posicion'
FROM tmpreemplazar
)
UPDATE auxtable
SET orden = posicion;
Sean felices! :) Y siéntanse libres de opinar ;)
Split string a rows o filas con sql server
La funcion es de tipo tabla, así que para utilizarla es:
select * from dbo.function('uno-dos')
Y esta es la función gracias a stackoverflow:
CREATE FUNCTION Split (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000)
)
AS
BEGIN
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
--INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
--INSERT INTO @Items VALUES (@InputString) -- Diagnostic
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item)
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item)
END
-- No delimiters were encountered in @InputString, so just return @InputString
ELSE INSERT INTO @Items VALUES (@InputString)
RETURN
END -- End Function
GO
La siguiente versión es para que tenga la variable orden.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[SplitTabla] (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000),
Orden INT
)
AS
BEGIN
DECLARE @auxorden INT
SET @auxorden = 0
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
--INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
--INSERT INTO @Items VALUES (@InputString) -- Diagnostic
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
set @auxorden = @auxorden + 1;
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item, @auxorden)
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
set @auxorden = @auxorden + 1;
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item, @auxorden)
END
-- No delimiters were encountered in @InputString, so just return @InputString
ELSE
BEGIN
set @auxorden = @auxorden + 1;
INSERT INTO @Items VALUES (@InputString, @auxorden)
END
RETURN
END -- End Function
Sean felices! :) Y siéntanse libres de opinar ;)
select * from dbo.function('uno-dos')
Y esta es la función gracias a stackoverflow:
CREATE FUNCTION Split (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000)
)
AS
BEGIN
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
--INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
--INSERT INTO @Items VALUES (@InputString) -- Diagnostic
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item)
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item)
END
-- No delimiters were encountered in @InputString, so just return @InputString
ELSE INSERT INTO @Items VALUES (@InputString)
RETURN
END -- End Function
GO
La siguiente versión es para que tenga la variable orden.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[SplitTabla] (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000),
Orden INT
)
AS
BEGIN
DECLARE @auxorden INT
SET @auxorden = 0
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
--INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
--INSERT INTO @Items VALUES (@InputString) -- Diagnostic
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
set @auxorden = @auxorden + 1;
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item, @auxorden)
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
set @auxorden = @auxorden + 1;
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item, @auxorden)
END
-- No delimiters were encountered in @InputString, so just return @InputString
ELSE
BEGIN
set @auxorden = @auxorden + 1;
INSERT INTO @Items VALUES (@InputString, @auxorden)
END
RETURN
END -- End Function
Sean felices! :) Y siéntanse libres de opinar ;)
Agrupar filas en una sola columna en SQL SERVER
Esto es gracias a Kevin Fairchild y a Ben y por supuesto a Stackoverflow.
Aquí esta la consulta para dejar los resultados de una varias filas en una sola columna... o sea como un group by de una columna de texto, y lo que hace es hacerle una concadenación:
Ejemplo siguiente: Una persona tiene varias direcciones de correo electronico, pero deseo agruparlas de tal forma que me aparezca así:
Persona Emails
1 mail@gmail.com; mail2@hotmail.com; mail3@yahoo.com
... ...
SELECT idpersona, STUFF((SELECT '; ' + email FROM direcciones WHERE PERDIR.idpersona = direcciones.idpersona FOR XML PATH ('') ),1,2,'') 'direccion' FROM direcciones PERDIR
where idpersona in
(
1,2,3,4,5
)
GROUP BY idpersona
Como se dan cuenta
Sean felices! :) Y sientanse libres de opinar ;)
Aquí esta la consulta para dejar los resultados de una varias filas en una sola columna... o sea como un group by de una columna de texto, y lo que hace es hacerle una concadenación:
Ejemplo siguiente: Una persona tiene varias direcciones de correo electronico, pero deseo agruparlas de tal forma que me aparezca así:
Persona Emails
1 mail@gmail.com; mail2@hotmail.com; mail3@yahoo.com
... ...
SELECT idpersona, STUFF((SELECT '; ' + email FROM direcciones WHERE PERDIR.idpersona = direcciones.idpersona FOR XML PATH ('') ),1,2,'') 'direccion' FROM direcciones PERDIR
where idpersona in
(
1,2,3,4,5
)
GROUP BY idpersona
Como se dan cuenta
Sean felices! :) Y sientanse libres de opinar ;)
Subconsulta con asterisco con SQL SERVER 2008
Hola.
Aquí esta la consulta:
select * from
(
select iddireccion, idcuenta from pedidos
group by iddireccion, idcuenta
)otratabla
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Aquí esta la consulta:
select * from
(
select iddireccion, idcuenta from pedidos
group by iddireccion, idcuenta
)otratabla
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Convertir float a nvarchar en SQL SERVER
La clave es utilizar la función
STR
y asi evitamos que nos deje los valores como si fueran hexadecimales.
Sean felices! :) Y sientanse libres de opinar ;)
STR
y asi evitamos que nos deje los valores como si fueran hexadecimales.
Sean felices! :) Y sientanse libres de opinar ;)
Eliminar usuario membership con SQL SERVER
Y este es el código:
DECLARE @RC int
DECLARE @ApplicationName nvarchar(256)
DECLARE @UserName nvarchar(256)
DECLARE @TablesToDeleteFrom int
DECLARE @NumTablesDeletedFrom int
SET @ApplicationName = '/'
SET @UserName = '111112'
SET @TablesToDeleteFrom = 15
EXECUTE @RC = [aspnet_Users_DeleteUser]
@ApplicationName
,@UserName
,@TablesToDeleteFrom
,@NumTablesDeletedFrom OUTPUT
El número 15 significa que se elimina de todas las tablas. Creo que el 9 elimina solo de la tabla membership, pero no de aspnet_users.
Sean felices! :) Y sientanse libres de opinar ;)
DECLARE @RC int
DECLARE @ApplicationName nvarchar(256)
DECLARE @UserName nvarchar(256)
DECLARE @TablesToDeleteFrom int
DECLARE @NumTablesDeletedFrom int
SET @ApplicationName = '/'
SET @UserName = '111112'
SET @TablesToDeleteFrom = 15
EXECUTE @RC = [aspnet_Users_DeleteUser]
@ApplicationName
,@UserName
,@TablesToDeleteFrom
,@NumTablesDeletedFrom OUTPUT
El número 15 significa que se elimina de todas las tablas. Creo que el 9 elimina solo de la tabla membership, pero no de aspnet_users.
Sean felices! :) Y sientanse libres de opinar ;)
Crear usuario membership .NET con SQL SERVER
Aquí dejo el código que me generó SQL SERVER, y al final deje el código en resumen hecho por mi.
Código generado por SQL y asignado valores por mi mismo
DECLARE @return_value int,
@UserId uniqueidentifier
SELECT @UserId = NEWID()
EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
@ApplicationName = N'/',
@UserName = N'777777',
@Password = N'777777',
@PasswordSalt = N'777777',
@PasswordQuestion = 'ninguno',
@PasswordAnswer = 'ninguno',
@Email = N'777@777.com',
@IsApproved = 1,
@CurrentTimeUtc = '2010-03-03',
@CreateDate = '2010-03-03',
@UniqueEmail = 1,
@PasswordFormat = 0,
@UserId = @UserId OUTPUT
SELECT @UserId as N'@UserId'
SELECT 'Return Value' = @return_value
GO
Aquí el código resumido por mi.
DECLARE @UserId uniqueidentifier
DECLARE @datenow NVARCHAR(15)
SELECT @UserId = NEWID()
SELECT @datenow = convert(varchar, GETDATE(), 111)
EXEC aspnet_Membership_CreateUser '/', '888888', '888888', '888888', '888888', '888888', '8@8.COM', 1, @datenow, @datenow, 1, 1, @UserId
SELECT * FROM ASPNET_MEMBERSHIP
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Código generado por SQL y asignado valores por mi mismo
DECLARE @return_value int,
@UserId uniqueidentifier
SELECT @UserId = NEWID()
EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
@ApplicationName = N'/',
@UserName = N'777777',
@Password = N'777777',
@PasswordSalt = N'777777',
@PasswordQuestion = 'ninguno',
@PasswordAnswer = 'ninguno',
@Email = N'777@777.com',
@IsApproved = 1,
@CurrentTimeUtc = '2010-03-03',
@CreateDate = '2010-03-03',
@UniqueEmail = 1,
@PasswordFormat = 0,
@UserId = @UserId OUTPUT
SELECT @UserId as N'@UserId'
SELECT 'Return Value' = @return_value
GO
Aquí el código resumido por mi.
DECLARE @UserId uniqueidentifier
DECLARE @datenow NVARCHAR(15)
SELECT @UserId = NEWID()
SELECT @datenow = convert(varchar, GETDATE(), 111)
EXEC aspnet_Membership_CreateUser '/', '888888', '888888', '888888', '888888', '888888', '8@8.COM', 1, @datenow, @datenow, 1, 1, @UserId
SELECT * FROM ASPNET_MEMBERSHIP
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Convertir fecha a Año Mes Dia YYYY/MM/DD en SQL SERVER
Bueno, aquí les dejo el dato:
select convert(varchar, GETDATE(), 111)
Cada número significa una conversión, así que solo es cambiar el número para un formato distinto.
Sean felices! :) Y sientanse libres de opinar ;)
select convert(varchar, GETDATE(), 111)
Cada número significa una conversión, así que solo es cambiar el número para un formato distinto.
Sean felices! :) Y sientanse libres de opinar ;)
Alias de columna en sentencia WHERE en SQL Server
Bueno...
Realmente no utilizo como tal el alias en la columna WHERE, sino lo que hacemos es emular una tabla apartir de una consulta SELECT. Entonces ahi si podremos utilizar el "alias", que no es alias en realidad, je je.... Pero mejor con el ejemplo:
SELECT * FROM
(
SELECT AUX1.idcliente, AUX1.valor,
(
SELECT SUM(AUX2.valor) FROM sb_auxlimites AUX2
WHERE AUX2.id <= AUX1.id
) AS [acumulado]
FROM sb_auxlimites AUX1
)X
WHERE [acumulado] < 5046548159
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Realmente no utilizo como tal el alias en la columna WHERE, sino lo que hacemos es emular una tabla apartir de una consulta SELECT. Entonces ahi si podremos utilizar el "alias", que no es alias en realidad, je je.... Pero mejor con el ejemplo:
SELECT * FROM
(
SELECT AUX1.idcliente, AUX1.valor,
(
SELECT SUM(AUX2.valor) FROM sb_auxlimites AUX2
WHERE AUX2.id <= AUX1.id
) AS [acumulado]
FROM sb_auxlimites AUX1
)X
WHERE [acumulado] < 5046548159
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Crear columna autonumerica a una consulta en SQL Server
Bueno... seré breve, esta una consulta que utilice para un proyecto:
SELECT CLI1.id, CLI1.idcliente, SUM(CLI1.primas), ROW_NUMBER() OVER( ORDER BY SUM(CLI1.primas)ASC ) as 'posicion'
FROM sb_clipro CLI1
WHERE CLI1.idproducto IN (
SELECT sb_producto.id FROM sb_producto
WHERE sb_producto.nombre IN ('AUT')
)
GROUP BY CLI1.id, CLI1.idcliente
ORDER BY SUM(CLI1.primas)
Sean felices! :) Y sientanse libres de opinar ;)
SELECT CLI1.id, CLI1.idcliente, SUM(CLI1.primas), ROW_NUMBER() OVER( ORDER BY SUM(CLI1.primas)ASC ) as 'posicion'
FROM sb_clipro CLI1
WHERE CLI1.idproducto IN (
SELECT sb_producto.id FROM sb_producto
WHERE sb_producto.nombre IN ('AUT')
)
GROUP BY CLI1.id, CLI1.idcliente
ORDER BY SUM(CLI1.primas)
y la clave para el autonumérico es:
ROW_NUMBER() OVER( ORDER BY SUM(CLI1.primas)ASC )
Como vemos la palabra clave ROW_NUMBER() , su propio nombre indica que cuenta los registros, sin embargo, debe ir acompañada de uan sentencia over donde se coloca un ORDER BY fundamental sobre la cual tomará la base ROW_NUMBER() y colocar el autonumerico.
Espero les sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Convertir formato YYYYMMDD a fecha
Bueno, cuando tengamos un campo tipo float con el formato YYYYMMDD, y lo queremos convertir a fecha, debemos primero pasarlo a varchar y después ahi si lo pasamos a fecha, así:
SELECT CAST(REPLACE(STR(nombrecampofloatfecha, 10), ' ', '') AS DATETIME) FROM nombretabla
Sean felices! :) Y sientanse libres de opinar ;)
SELECT CAST(REPLACE(STR(nombrecampofloatfecha, 10), ' ', '') AS DATETIME) FROM nombretabla
Sean felices! :) Y sientanse libres de opinar ;)
Convertir float a varchar sin que quede hexadecimal
Bueno, cuando convertimos un float a un varchar nos da formato hexadecimal.
para que sencillamente lo pase a tipo texto se utiliza la función STR, pero ojo que si por ejemplo el numero tiene solo 3 numeros, al pasarlo con STR queda así " 123", es decir, deja unos espacios, entonces recomiendo despues del STR quitar los los espacios generados con un replace.
Además, el STR tiene un parametro más para especificar el numero de caracteres a convertir.
Bueno, para más información buscar en google STR sql server en internet.
Así que esta sería la sentencia a utilizar realizando STR para un número no mayor a 10 caracteres, y de una vez hacemos el replace para que no quede con espacios blancos.
SELECT REPLACE(STR( nombredecampo , 10), ' ', '') FROM nombretabla
Ah, y por cierto... esto es en SQL SERVER.
Sean felices! :) Y sientanse libres de opinar ;)
para que sencillamente lo pase a tipo texto se utiliza la función STR, pero ojo que si por ejemplo el numero tiene solo 3 numeros, al pasarlo con STR queda así " 123", es decir, deja unos espacios, entonces recomiendo despues del STR quitar los los espacios generados con un replace.
Además, el STR tiene un parametro más para especificar el numero de caracteres a convertir.
Bueno, para más información buscar en google STR sql server en internet.
Así que esta sería la sentencia a utilizar realizando STR para un número no mayor a 10 caracteres, y de una vez hacemos el replace para que no quede con espacios blancos.
SELECT REPLACE(STR( nombredecampo , 10), ' ', '') FROM nombretabla
Ah, y por cierto... esto es en SQL SERVER.
Sean felices! :) Y sientanse libres de opinar ;)
Cursor básico en SQL SERVER
Bueno....
Aquí dejo un código básico del cual se tomará como base para mis próximos cursores.
Este cursor recibe un parámetro el cual tomo para ejecutar lo que quiera dentro del cursor.
DECLARE @idproducto AS nvarchar(400)
DECLARE CursorIdProductos CURSOR FOR
SELECT id FROM sb_producto
OPEN CursorIdProductos
FETCH NEXT FROM CursorIdProductos INTO @idproducto
WHILE @@fetch_status = 0
BEGIN
//esto es lo que ejecutare n veces segun el select de arriba
PRINT @idproducto
//todo el codigo de más, es pura chachara obligatoria... je je
FETCH NEXT FROM CursorIdProductos INTO @idproducto
END
CLOSE CursorIdProductos
DEALLOCATE CursorIdProductos
Saludos.
Sean felices! :) Y sientanse libres de opinar ;)
Aquí dejo un código básico del cual se tomará como base para mis próximos cursores.
Este cursor recibe un parámetro el cual tomo para ejecutar lo que quiera dentro del cursor.
DECLARE @idproducto AS nvarchar(400)
DECLARE CursorIdProductos CURSOR FOR
SELECT id FROM sb_producto
OPEN CursorIdProductos
FETCH NEXT FROM CursorIdProductos INTO @idproducto
WHILE @@fetch_status = 0
BEGIN
//esto es lo que ejecutare n veces segun el select de arriba
PRINT @idproducto
//todo el codigo de más, es pura chachara obligatoria... je je
FETCH NEXT FROM CursorIdProductos INTO @idproducto
END
CLOSE CursorIdProductos
DEALLOCATE CursorIdProductos
Saludos.
Sean felices! :) Y sientanse libres de opinar ;)
Utilizar While en store procedures en SQL Server
Bueno, esto lo dejo aquí es como para recordar como se hace un ciclo repetitivo en sql server.
No se si esto les sirva, pero es bien básico. En este caso, es un ciclo y dentro de este, otro ciclo.
BEGIN
declare @parentid int
declare @parentidj int
declare @conteo int
SET NOCOUNT ON;
SET @parentid = 4
SET @parentidj = 1
SET @conteo = 0
WHILE @parentid < 11
BEGIN
--print 'a'
set @parentidj = 26;
WHILE @parentidj < 42
BEGIN
INSERT INTO tblResultadoTMK_Servicio VALUES (@conteo + 1, @parentidj, @parentid )
print convert(varchar(30), @conteo + 1) + ' v ' + convert(varchar(30), @parentidj) + ' v ' + convert(varchar(30), @parentid)
--print @parentid
set @parentidj = @parentidj + 1;
SET @conteo = @conteo + 1;
END
set @parentid = @parentid + 1;
END
print @conteo
END
Sean felices! :) Y sientanse libres de opinar ;)
Pasar variables a sql dinamico
Bueno, no se si esto lo vaya a utilizar, pero el caso es que esto me funcionó para pasar parametros a un sql dinamico... así que aquí dejo el código... que pena, sin comentarios el codigo porque lo hice como hace 2 años o 3.
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'SELECT @LastlnameOUT = max(lname)
FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint, @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
---------------------------
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'Select @LastlnameOUT = Case ''ImageDirect'' when ''ImageDirect'' then 16 else 17 end'
SET @ParmDefinition = N'@level tinyint, @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
PRINT @Lastlname
Depronto a alguien le sirva.
Sean felices! :) Y sientanse libres de opinar ;)
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'SELECT @LastlnameOUT = max(lname)
FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint, @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
---------------------------
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'Select @LastlnameOUT = Case ''ImageDirect'' when ''ImageDirect'' then 16 else 17 end'
SET @ParmDefinition = N'@level tinyint, @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
PRINT @Lastlname
Depronto a alguien le sirva.
Sean felices! :) Y sientanse libres de opinar ;)
Suscribirse a:
Entradas (Atom)
Palabras Clave
.NET
(93)
AJAX
(2)
ajaxcontroltoolkit
(2)
Algoritmos
(1)
android
(1)
Angular
(1)
Arrays
(1)
AS2 o ActionScript 2.0
(1)
AS3 o ActionScript 3.0
(64)
ASP
(7)
ASP.NET
(3)
Azure
(1)
Azure DevOps
(2)
Backup
(2)
Batch
(4)
blogger
(1)
Browser Support
(2)
C#
(53)
Charts
(1)
Chorme extensions
(1)
Chrome
(3)
cmd
(18)
código postal
(1)
Colombia tips
(1)
command
(1)
Conexion remota
(1)
Controles Web .NET
(24)
Cookies
(1)
cordova
(1)
CSS
(14)
CSV
(5)
Cufon
(1)
DateTime
(2)
deployment
(2)
Desarrollo movil
(2)
Desarrollo web
(5)
Diseño
(4)
DNN o DotNetNuke
(5)
docker
(1)
Encuestas
(1)
Entity Framework
(1)
Error
(1)
Eval
(2)
Excel
(4)
Expresiones regulares
(2)
Facebook
(14)
fechas
(1)
Fiddler
(1)
FileUpload
(1)
Filezilla
(1)
Firefox
(2)
Flash
(9)
Fonts
(3)
FQL
(1)
frameworks
(2)
Futuro de la web
(1)
git
(1)
Google Code
(13)
Google Maps
(4)
hackintosh
(3)
hazard 10.6.2
(3)
herramientas para developers
(1)
highchart
(1)
Hilos
(2)
Hosting Windows
(18)
HTML
(38)
HTML5
(6)
IDE
(1)
IE
(2)
IE9
(1)
IIS
(13)
imagenes
(3)
jasmine
(2)
java
(1)
jqgrid
(2)
Jquery y Javascript
(90)
jquery-ui
(5)
jQueryMobile
(1)
JSON
(1)
knockout
(4)
library
(1)
Link Interesantes
(2)
List
(1)
Macro
(2)
Matemáticas
(2)
Membership
(6)
Memoria
(1)
Mis Experiencias
(3)
momentjs
(1)
ms-dos
(1)
MSN
(1)
MVC
(1)
MVC4
(3)
MySQL
(2)
node.js
(4)
Notepad++
(3)
Notificaciones
(1)
ObjectDataSource
(2)
Online
(2)
Opinión
(4)
OSX
(3)
Parallels Plesk Panel
(1)
petapoco
(1)
PhantomJS
(1)
PHP
(4)
Porqué este blog
(1)
Powershell
(1)
Razor
(3)
Redes
(2)
REGEX
(4)
REST
(1)
SDK Android
(1)
Seguridad
(1)
SelectParameters
(1)
Selenium
(2)
sencha
(3)
sencha cmd
(2)
SEO
(1)
SMTP
(2)
Software útil
(8)
Solución
(1)
Soporte
(1)
SQL
(15)
SQL Server
(58)
SQLite
(2)
Store Procedures
(20)
String
(5)
Testing Code
(2)
texto
(2)
tips de datos
(1)
tips de desarrollo
(1)
TutoFaceAS3
(4)
TutoProAS3
(4)
Tutoriales
(7)
Tweenlite effects
(3)
Últimas noticias
(1)
unit testing
(1)
usb
(1)
VBA
(1)
Video
(1)
virus
(1)
Web API
(2)
Web Browsers
(1)
Web Forms
(7)
web.config
(1)
Webmaster
(8)
Webmatrix
(1)
webrole
(1)
webservices
(1)
webstorm
(1)
Win Forms
(5)
Windows
(21)
Windows 7
(1)
Windows 8
(1)
XML
(2)
Youtube API
(2)