Monday, July 29, 2013

How to create Function and Procedure in SQL Server 2008

EMI Calculation Formula

 E = P.R.(1+R)^n / (1+R)^n – 1)

SELECT QUERY
DECLARE @P AS INT
DECLARE @I AS FLOAT
DECLARE @R AS FLOAT
DECLARE @Y AS FLOAT
DECLARE @N AS FLOAT
DECLARE @A AS FLOAT
DECLARE @B AS FLOAT
DECLARE @C AS FLOAT
DECLARE @E AS FLOAT

SET @P = 1000000
SET @I = 10.5
SET @R = (@I/12)/100
SET @Y = 10
SET @N = (@Y * 12)
SET @A = POWER((1+@R),@N)
SET @B = (@A-1)
SET @C = (@A/@B)
SET @E = @P * @R * @C

SELECT ROUND(@E,2) AS EMI
SELECT ROUND((@E*@N),2) AS TOTAL

CREATE FUNCTION

CREATE FUNCTION EMI
(@P AS INT,
 @I AS FLOAT,
 @Y AS FLOAT)
RETURNS FLOAT
AS BEGIN
DECLARE @R AS FLOAT    
DECLARE @N AS FLOAT    
DECLARE @A AS FLOAT    
DECLARE @B AS FLOAT
DECLARE @C AS FLOAT    
DECLARE @E AS FLOAT

SET @R = (@I/12)/100
SET @N = (@Y * 12)
SET @A = POWER((1+@R),@N)    
SET @B = (@A-1)  
SET @C = (@A/@B)
SET @E = @P * @R * @C
RETURN ROUND(@E,2)
END

SELECT dbo.EMI(1000000,10.5,10)

CREATE PROCEDURE

CREATE PROCEDURE EMI
(@P AS INT,
 @I AS FLOAT,
 @Y AS FLOAT)
AS BEGIN
DECLARE @R AS FLOAT    
DECLARE @N AS FLOAT    
DECLARE @A AS FLOAT    
DECLARE @B AS FLOAT
DECLARE @C AS FLOAT    
DECLARE @E AS FLOAT

SET @R = (@I/12)/100
SET @N = (@Y * 12)
SET @A = POWER((1+@R),@N)    
SET @B = (@A-1)  
SET @C = (@A/@B)
SET @E = @P * @R * @C
SELECT ROUND(@E,2)
END

EXEC EMI '1000000','10.5','10'

Thursday, July 25, 2013

SQLBulkCopy Example in SQL Server and VB.Net

BULK INSERT <TABLE_NAME> FROM 'D:\AAA.TXT'
WITH (FIELDTERMINATOR = ',', 
      ROWTERMINATOR = '\N')

Imports System.Data.SqlClient.SqlBulkCopy

Private Sub Button_Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Insert.Click
  con.Open()
        Dim sql_bulkcopy As New SqlClient.SqlBulkCopy(con)
        sql_bulkcopy.DestinationTableName = "abc"
        'sql_bulkcopy.BulkCopyTimeout = 30
        Try
            sql_bulkcopy.WriteToServer(fill_datatable())
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        sql_bulkcopy.Close()
    End Sub
Function fill_datatable() As DataTable
        Dim dt As New DataTable
        dt.Clear()
        ' Header columns
        For Each column As DataGridViewColumn In DataGridView1.Columns
            Dim dc As New DataColumn(column.Name.ToString())
            dt.Columns.Add(dc)
        Next
        ' Data cells
        For i As Integer = 0 To DataGridView1.Rows.Count - 2
            Dim row As DataGridViewRow = DataGridView1.Rows(i)
            Dim dr As DataRow = dt.NewRow()
            For j As Integer = 0 To DataGridView1.Columns.Count - 1
                dr(j) = If((row.Cells(j).Value Is Nothing), " ", row.Cells(j).Value.ToString())
            Next
            dt.Rows.Add(dr)
        Next

        ' Related to the bug arround min size when using ExcelLibrary for export
        For i As Integer = DataGridView1.Rows.Count To DataGridView1.Rows.Count - 1
            Dim dr As DataRow = dt.NewRow()
            For j As Integer = 0 To dt.Columns.Count - 1
                dr(j) = " "
            Next
            dt.Rows.Add(dr)
        Next
         Return dt
     End Function

Private Sub Button_Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Clear.Click
       
        Try
            Dim x As Integer
            i = DataGridView1.Rows.Count
            While (x <= i - 2)
                sql = "Insert into abc values('" & DataGridView1.Item(0, x).Value & "','" & DataGridView1.Item(1, x).Value & "','" & DataGridView1.Item(2, x).Value & "')"
                cmd = New SqlCommand(sql, con)
                icount = cmd.ExecuteNonQuery
                x = x + 1
            End While
            MsgBox("Insert Successful!")
            DataGridView1.Rows.Clear()
        Catch es As Exception
            MsgBox(es.Message)
        End Try

    End Sub

Wednesday, July 3, 2013

Amount in Word in SQL Server

CREATE Function [dbo].[fConvertDigit](@decNumber VARCHAR(1))RETURNS VARCHAR(6)
 AS
 BEGIN
 DECLARE @strWords VARCHAR(6)
      SELECT @strWords = CASE @decNumber
                                  WHEN '1' THEN 'One'
                                  WHEN '2' THEN 'Two'
                                  WHEN '3' THEN 'Three'
                                  WHEN '4' THEN 'Four'
                                  WHEN '5' THEN 'Five'
                                  WHEN '6' THEN 'Six'
                                  WHEN '7' THEN 'Seven'
                                  WHEN '8' THEN 'Eight'
                                  WHEN '9' THEN 'Nine'
                                  ELSE ''
                                 END
 RETURN @strWords
 END
CREATE Function [dbo].[fConvertTens](@decNumber VARCHAR(2))RETURNS VARCHAR(30)
 AS
 BEGIN
 DECLARE @strWords varchar(30)
 --Is value between 10 And 19?
 IF LEFT(@decNumber, 1) = 1
 BEGIN
      SELECT @strWords = CASE @decNumber
                                    WHEN '10' THEN 'Ten'
                                    WHEN '11' THEN 'Eleven'
                                    WHEN '12' THEN 'Twelve'
                                    WHEN '13' THEN 'Thirteen'
                                    WHEN '14' THEN 'Fourteen'
                                    WHEN '15' THEN 'Fifteen'
                                    WHEN '16' THEN 'Sixteen'
                                    WHEN '17' THEN 'Seventeen'
                                    WHEN '18' THEN 'Eighteen'
                                    WHEN '19' THEN 'Nineteen'
                                END
 END
 ELSE  -- otherwise it's between 20 And 99.
 BEGIN
      SELECT @strWords = CASE LEFT(@decNumber, 1)
                                    WHEN '0' THEN '' 
                                    WHEN '2' THEN 'Twenty '
                                    WHEN '3' THEN 'Thirty '
                                    WHEN '4' THEN 'Forty '
                                    WHEN '5' THEN 'Fifty '
                                    WHEN '6' THEN 'Sixty '
                                    WHEN '7' THEN 'Seventy '
                                    WHEN '8' THEN 'Eighty '
                                    WHEN '9' THEN 'Ninety '
                                 END
  SELECT @strWords = @strWords + dbo.fConvertDigit(RIGHT(@decNumber, 1))            --Convert ones place digit.
 END
 RETURN RTRIM(@strWords)
 END
CREATE FUNCTION [dbo].[cFunction_AmountInWords] (@decNumber DECIMAL(18, 2)) RETURNS VARCHAR(3000)
 AS
 BEGIN

 DECLARE
  @strNumber varchar(100),
  @strRupees varchar(200),
  @strPaise varchar(100),
  @strWords varchar(300),
  @intIndex integer

 -- For Paise
 SET @strNumber = CAST(@decNumber AS VARCHAR(100))
 SET @intIndex = CHARINDEX('.', @strNumber)
 IF @intIndex > 0
 BEGIN
      SET @strPaise = dbo.fConvertTens(RIGHT(@strNumber,LEN(@strNumber) -  @intIndex))
      SET @strNumber = LEFT(@strNumber, @intIndex -)
      IF LEN(@strPaise) > 0 SELECT @strPaise = @strPaise + ' Paise'
 END
 -- Rupees
 SET @strRupees = ''
 SET @intIndex=LEN(@strNumber)
 WHILE(@intIndex>0)
 BEGIN
      SET @strRupees = @strRupees +
                              (CASE WHEN @intIndex > 8 THEN dbo.cFunction_AmountInWords(CONVERT(INT,LEFT(@strNumber , LEN(@strNumber)-7))) + ' Crores '
                                      WHEN @intIndex = 8 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertDigit(LEFT(@strNumber,1)) + (CASE WHEN LEFT(@strNumber,1) <> '1' THEN ' Crore ' ELSE ' Crores ' END)
                                      WHEN @intIndex = 7 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertTens(LEFT(@strNumber,2)) + ' Lacs '
                                      WHEN @intIndex = 6 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertDigit(LEFT(@strNumber,1)) + + (CASE WHEN LEFT(@strNumber,1) <> '1' THEN ' Lac ' ELSE ' Lacs ' END)
                                      WHEN @intIndex = 5 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertTens(LEFT(@strNumber,2)) + ' Thousand '
                                      WHEN @intIndex = 4 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertDigit(LEFT(@strNumber,1)) + ' Thousand '
                                      WHEN @intIndex = 3 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertDigit(LEFT(@strNumber,1)) + ' Hundred '
                                      WHEN @intIndex = 2 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertTens(LEFT(@strNumber,2))
                                      WHEN @intIndex = 1 AND LEFT(@strNumber,1) <> '0' THEN dbo.fConvertDigit(LEFT(@strNumber,1))
                                    ELSE ''
                              END)
      SET @intIndex=@intIndex -
                              (CASE WHEN @intIndex > 8 THEN (@intIndex - 7)
                                      WHEN (@intIndex = 7 OR @intIndex = 5 OR @intIndex = 2) AND LEFT(@strNumber,1) <> '0' THEN 2
                                      ELSE 1
                              END)
      SET @strNumber = RIGHT(@strNumber,@intIndex)
 END
 -- For Return
 IF(LEN(@strPaise)<>0)
 BEGIN
  IF LEN(@strRupees)>0 SET @strRupees=@strRupees + ' And '
 END
 SET @strWords = IsNull(@strRupees, '') + IsNull(@strPaise, '')
 RETURN @strWords
 -- ---------------------
 END
create proc fnNumToWords

@Number Numeric(18,2)

as
BEGIN
      create table #M_Words (Code numeric(9) identity,WNumber     int Default 0,Wwords varchar(100) Default '')

      Declare @StrNumber varchar(10), @SLacs char(2), @SThou char(2), @SHun char(2)
      Declare @STenUnt char(2), @STen char(2), @SUnt char(2), @SDecimal char(2)
      Declare @ILacs Int, @IThou Int, @IHun Int, @ITenUnt Int, @ITen Int, @IUnt Int, @IDecimal Int
      Declare @SNumToWords varchar(100), @Wwords varchar(10)

      Select @StrNumber = Replicate('0',10-Len(LTrim(RTrim(convert(varchar,@Number))))) + LTrim(RTrim(Convert(varchar,@Number)))
     
      Select @SNumToWords = ''

      If Len(LTrim(RTrim(convert(varchar,@Number)))) > 4
      Begin
     
            Select @SLacs = Substring(@StrNumber,1,2)
     
            Select @ILacs = Convert(int,@SLacs)
            If @ILacs > 0
            Begin
                  Select @STen = Substring(@StrNumber,1,1)
                  Select @SUnt = Substring(@StrNumber,2,1)

                  if Convert(int,@STen) = 1
                  Begin
                        Select @ITen = Convert(int,Substring(@StrNumber,1,2))
                        Select @IUnt = 0
                  End
                  Else
                  Begin
                        Select @ITen = Convert(int,@STen)*10
                        Select @IUnt = Convert(int,@SUnt)
                  End

                  If @ITen > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @ITen
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Tens'
                  End

                  If @IUnt > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @IUnt
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Unit'
                  End

                  Select @SNumToWords = @SNumToWords + ' Lacs'
            End

            Select @SThou = Substring(@StrNumber,3,2)
           
            Select @IThou = Convert(int,@SThou)
            If @IThou > 0
            Begin
                  Select @STen = Substring(@StrNumber,3,1)
                  Select @SUnt = Substring(@StrNumber,4,1)

                  if Convert(int,@STen) = 1
                  Begin
                        Select @ITen = Convert(int,Substring(@StrNumber,3,2))
                        Select @IUnt = 0
                  End
                  Else
                  Begin
                        Select @ITen = Convert(int,@STen)*10
                        Select @IUnt = Convert(int,@SUnt)
                  End
                 
                  If @ITen > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @ITen
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Tens'
                  End

                  If @IUnt > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @IUnt
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Unit'
                  End

                  Select @SNumToWords = @SNumToWords + ' Thousand '
            End

            Select @SHun = Substring(@StrNumber,5,1)
           
            Select @IHun = Convert(int,@SHun)
            If @IHun > 0
            Begin
                  Select @Wwords = ''
                  Select @Wwords = Wwords From #M_Words Where WNumber = @IHun
                 
                  Select @SNumToWords = @SNumToWords + @Wwords + ' Hundred'
            End

            Select @STenUnt = Substring(@StrNumber,6,2)
           
            Select @ITenUnt = Convert(int,@STenUnt)

            If @ITenUnt > 0
            Begin
                  Select @STen = Substring(@StrNumber,6,1)
                  Select @SUnt = Substring(@StrNumber,7,1)

                  if Convert(int,@STen) = 1
                  Begin
                        Select @ITen = Convert(int,Substring(@StrNumber,6,2))
                        Select @IUnt = 0
                  End
                  Else
                  Begin
                        Select @ITen = Convert(int,@STen)*10
                        Select @IUnt = Convert(int,@SUnt)
                  End

                 
                  If @ITen > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @ITen
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Tens'
                  End

                  If @IUnt > 0
                  Begin            
                        Select @Wwords = ''
                        Select @Wwords = Wwords From #M_Words Where WNumber = @IUnt
                       
                        Select @SNumToWords = @SNumToWords + Space(1) + @Wwords --' Unit'
                  End
            End

            Select @SNumToWords = @SNumToWords + Space(1) + 'Rupees'          --Only/-



      End
      Else
      Begin
           
            Select @SLacs = Substring(LTrim(RTrim(convert(varchar,@Number))),1,1)
           
            Select @ILacs = Convert(int,@SLacs)
            If @ILacs > 0 and @ILacs <> 1
            Begin
                  Select @Wwords = ''
                  Select @Wwords = Wwords From #M_Words Where WNumber = @ILacs
                 
                  Select @SNumToWords = @SNumToWords + Space(1) + @Wwords + Space(1) + 'Rupees'
            End
            Else
            Begin
                  Select @Wwords = ''
                  Select @Wwords = Wwords From #M_Words Where WNumber = @ILacs
                 
                  Select @SNumToWords = @SNumToWords + @Wwords + Space(1) + 'Rupee'
            End
      End

      select @Number


End