DimovIvan

MS SQL - Functions and Stored Procedures

Jun 9th, 2022 (edited)
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.84 KB | None | 0 0
  1.              --Functions and Stored Procedures
  2.  
  3. --01. Employees with Salary Above 35000
  4.  
  5. CREATE PROC usp_GetEmployeesSalaryAbove35000
  6. AS
  7. BEGIN
  8.     SELECT
  9.            FirstName AS [First Name]
  10.            ,LastName AS [Last Name]
  11.       FROM Employees
  12.      WHERE Salary > 35000
  13. END
  14.  
  15. GO
  16.  
  17. EXEC usp_GetEmployeesSalaryAbove35000
  18.  
  19. GO
  20.  
  21. --02. Employees with Salary Above Number
  22.  
  23. CREATE PROC usp_GetEmployeesSalaryAboveNumber(@salary DECIMAL(18, 4))
  24. AS
  25. BEGIN
  26.     SELECT
  27.            FirstName AS [First Name]
  28.            ,LastName AS [Last Name]
  29.       FROM Employees
  30.      WHERE Salary >= @salary
  31. END
  32.  
  33. GO
  34.  
  35. EXEC usp_GetEmployeesSalaryAboveNumber 48100
  36.  
  37. GO
  38.  
  39. --03. Town Names Starting With
  40.  
  41. CREATE PROC usp_GetTownsStartingWith(@startNameTown VARCHAR(10))
  42. AS
  43. BEGIN
  44.     SELECT
  45.            [Name] AS Town
  46.       FROM Towns
  47.       WHERE SUBSTRING([Name], 1, LEN(@startNameTown)) = @startNameTown
  48. END
  49.  
  50. GO
  51.  
  52. EXEC usp_GetTownsStartingWith EVE
  53.  
  54. GO
  55.  
  56. --04. Employees from Town
  57.  
  58. CREATE PROC usp_GetEmployeesFromTown(@townName VARCHAR(50))
  59. AS
  60. BEGIN
  61.     SELECT
  62.            e.FirstName
  63.           ,e.LastName
  64.       FROM Towns AS t
  65.       JOIN Addresses AS a ON t.TownID = a.TownID
  66.       RIGHT JOIN Employees AS e ON a.AddressID = e. AddressID
  67.       WHERE t.[Name] = @townName
  68. END
  69.  
  70. GO
  71.  
  72. EXEC usp_GetEmployeesFromTown Sofia
  73.  
  74. GO
  75.  
  76. --05. Salary Level Function
  77.  
  78. CREATE FUNCTION ufn_GetSalaryLevel(@salary DECIMAL(18,4))
  79. RETURNS VARCHAR(10)
  80. AS
  81. BEGIN
  82.     DECLARE @result VARCHAR(10)
  83.     SET @result = 'High'
  84.     IF (@salary < 30000)
  85.     BEGIN
  86.         SET @result = 'Low'
  87.     END
  88.     ELSE IF (@salary BETWEEN 30000 AND 50000)
  89.     BEGIN
  90.         SET @result = 'Average'
  91.     END
  92.     RETURN @result
  93. END
  94.  
  95. GO
  96.  
  97. SELECT
  98.        Salary
  99.        ,dbo.ufn_GetSalaryLevel(Salary) AS SalaryLevel
  100.   FROM Employees
  101.  
  102. GO
  103.  
  104. --06. Employees by Salary Level
  105.  
  106. CREATE PROC usp_EmployeesBySalaryLevel (@salaryLevel VARCHAR(10))
  107. AS
  108. BEGIN
  109.     SELECT
  110.            FirstName AS [First Name]
  111.            ,LastName AS [Last Name]
  112.       FROM Employees
  113.       WHERE dbo.ufn_GetSalaryLevel(Salary) = @salaryLevel
  114. END
  115.  
  116. GO
  117.  
  118. EXEC usp_EmployeesBySalaryLevel 'High'
  119. EXEC usp_EmployeesBySalaryLevel 'Low'
  120. EXEC usp_EmployeesBySalaryLevel 'Average'
  121.  
  122. GO
  123.  
  124. --07. Define Function
  125.  
  126. CREATE FUNCTION ufn_IsWordComprised(@setOfLetters VARCHAR(50), @word VARCHAR(50))
  127. RETURNS BIT
  128. AS
  129. BEGIN
  130.     DECLARE @WordLength INT = LEN(@word)
  131.     DECLARE @Index INT = 1
  132.  
  133.     WHILE (@Index <= @WordLength)
  134.     BEGIN
  135.         IF (CHARINDEX(SUBSTRING(@word, @Index, 1), @setOfLetters) = 0)
  136.         BEGIN
  137.             RETURN 0
  138.         END
  139.  
  140.         SET @Index += 1
  141.     END
  142.  
  143.     RETURN 1
  144. END
  145.  
  146. GO
  147.  
  148. SELECT dbo.ufn_IsWordComprised('oistmiahf', 'Sofia')
  149. SELECT dbo.ufn_IsWordComprised('oistmiahf', 'halves')
  150.  
  151. GO
  152.  
  153. --08. Delete Employees and Departments
  154.  
  155. CREATE PROC usp_DeleteEmployeesFromDepartment (@departmentId INT)
  156. AS
  157. BEGIN
  158.     DELETE
  159.       FROM EmployeesProjects
  160.      WHERE EmployeeID IN(
  161.                          SELECT
  162.                                 EmployeeID
  163.                            FROM Employees
  164.                           WHERE DepartmentID = @departmentId
  165.                         )
  166.     UPDATE Employees
  167.        SET ManagerID = NULL
  168.      WHERE ManagerID IN(
  169.                          SELECT
  170.                                 EmployeeID
  171.                            FROM Employees
  172.                           WHERE DepartmentID = @departmentId
  173.                         )
  174.     ALTER TABLE Departments
  175.     ALTER COLUMN ManagerID INT
  176.     UPDATE Departments
  177.        SET ManagerID = NULL
  178.      WHERE ManagerID IN(
  179.                          SELECT
  180.                                 EmployeeID
  181.                            FROM Employees
  182.                           WHERE DepartmentID = @departmentId
  183.                         )
  184.  
  185.     DELETE FROM Employees
  186.           WHERE DepartmentID = @departmentId
  187.  
  188.     DELETE FROM Departments
  189.           WHERE DepartmentID = @departmentId
  190.  
  191.     SELECT
  192.      COUNT(*)
  193.       FROM Employees
  194.      WHERE DepartmentID = @departmentId
  195. END
  196.  
  197. --09. Find Full Name
  198. USE Bank
  199.  
  200. GO
  201.  
  202. CREATE PROC usp_GetHoldersFullName
  203. AS
  204. BEGIN
  205.     SELECT
  206.            CONCAT(FirstName, ' ', LastName) AS [Full Name]
  207.       FROM AccountHolders
  208. END
  209.  
  210. GO
  211.  
  212. --10. People with Balance Higher Than
  213.  
  214. CREATE PROC usp_GetHoldersWithBalanceHigherThan(@number MONEY) 
  215. AS
  216. BEGIN
  217.             SELECT
  218.                    ah.FirstName
  219.                    ,ah.LastName
  220.                    --,SUM(a.Balance)
  221.               FROM AccountHolders AS ah
  222.          LEFT JOIN Accounts AS a ON ah.Id = a.AccountHolderId
  223.           GROUP BY ah.FirstName, ah.LastName
  224.             HAVING SUM(a.Balance) > @number
  225.           ORDER BY ah.FirstName, ah.LastName
  226. END
  227.  
  228. GO
  229.  
  230. EXEC usp_GetHoldersWithBalanceHigherThan 20000
  231.  
  232. GO
  233.  
  234. --11. Future Value Function
  235. CREATE FUNCTION ufn_CalculateFutureValue(@sum DECIMAL(16, 4), @rate FLOAT, @years INT)
  236. RETURNS DECIMAL(16, 4)
  237. AS
  238. BEGIN
  239.     DECLARE @result DECIMAL(16, 4) = @sum
  240.     WHILE(@years > 0)
  241.     BEGIN
  242.         SET @result += (@sum * @rate)
  243.         SET @years -= 1
  244.         SET @sum = @result
  245.     END
  246.     RETURN @result
  247. END
  248.  
  249. GO
  250.  
  251. --11.1 Future Value Function
  252. CREATE FUNCTION ufn_CalculateFutureValue(@sum DECIMAL(16, 4), @rate FLOAT, @years INT)
  253. RETURNS DECIMAL(16, 4)
  254. AS
  255. BEGIN
  256.     DECLARE @result DECIMAL(16, 4) = @sum * POWER(1 + @rate, @years)
  257.     RETURN @result
  258. END
  259.  
  260. GO
  261.  
  262. SELECT dbo.ufn_CalculateFutureValue(123.12, 0.1, 5)
  263.  
  264. GO
  265.  
  266. --12. Calculating Interest
  267.  
  268. CREATE PROC usp_CalculateFutureValueForAccount (@accountId INT, @rate FLOAT)
  269. AS
  270. BEGIN
  271.        SELECT
  272.               ah.Id AS [Account Id]
  273.               ,ah.FirstName AS [First Name]
  274.               ,ah.LastName AS [Last Name]
  275.               ,a.Balance AS [Current Balance]
  276.               ,dbo.ufn_CalculateFutureValue(a.Balance, @rate, 5) AS [Balance in 5 years]
  277.          FROM AccountHolders AS ah
  278.     LEFT JOIN Accounts AS a ON ah.Id = a.AccountHolderId
  279.         WHERE a.Id = @accountId
  280. END
  281.  
  282. GO
  283.  
  284. EXEC usp_CalculateFutureValueForAccount 1, 0.1
  285.  
  286. GO
  287.  
  288. --13 Table-valued Function: Cash in User Games Odd Rows
  289. USE Diablo
  290.  
  291. CREATE FUNCTION ufn_CashInUsersGames (@gameName NVARCHAR(50))
  292. RETURNS TABLE
  293. AS
  294. RETURN
  295. (
  296. SELECT
  297.        SUM(Cash) AS SumCash
  298.   FROM (
  299.        SELECT ug.Cash
  300.               ,ROW_NUMBER() OVER (ORDER BY ug.Cash DESC) AS RowNumber
  301.          FROM UsersGames AS ug
  302.          JOIN Games AS g ON ug.GameId = g.Id
  303.         WHERE g.[Name] = @gameName
  304.         ) AS RowNumberSubquery
  305.  WHERE RowNumber % 2 != 0
  306. )
  307.  
  308. GO
  309.  
  310. SELECT * FROM dbo.ufn_CashInUsersGames('Love in a mist')
  311.  
  312. GO
  313.  
Add Comment
Please, Sign In to add comment