21:20:11 От Джони : у всех наверно 21:20:14 От Kirill Amurskiy : + 21:20:25 От Алексей Демиденко : Не, просто трансляция повисла 21:20:27 От Kirill Amurskiy : у нас норм 21:20:32 От Otus Онлайн : Коллеги, я здесь 21:20:36 От Otus Онлайн : меня видно? 21:20:38 От Алексей Демиденко : + 21:20:39 От Джони : да 21:20:39 От Сергей : + 21:20:44 От Джони : + 21:20:45 От prib : + 21:23:21 От Otus Онлайн : я отвалился, когда рассказывал про параметры? 21:23:51 От Kirill Amurskiy : + 21:23:52 От Otus Онлайн : видно мое сообщение? 21:23:54 От prib : сообщение видно 21:23:56 От Kirill Amurskiy : да где-то тогда 21:26:37 От Kirill Amurskiy : + 21:28:38 От Otus Онлайн : --- CREATE PROCEDURE Sales.uspGetSalesYTD @SalesPerson nvarchar(50) = NULL -- NULL default value AS SET NOCOUNT ON; -- Validate the @SalesPerson parameter. IF @SalesPerson IS NULL BEGIN PRINT 'ERROR: You must specify the last name of the sales person.' RETURN END -- Get the sales for the specified sales person and -- assign it to the output parameter. SELECT CustomerID FROM Sales.Customers AS c WHERE c.CustomerName = @SalesPerson; RETURN GO 21:31:05 От Алексей Смирнов : а еще триггеры, циклы, курсоры, судя по описанию занятия 21:32:15 От SergeyProkopchuk : в описании занятия 21:35:56 От Otus Онлайн : --- USE WideWorldImporters; GO -- Create a procedure that takes one input parameter and returns one output parameter and a return code. CREATE PROCEDURE SampleProcedure @PersonIDParm INT, @MaxTotal Date OUTPUT AS -- Declare and initialize a variable to hold @@ERROR. DECLARE @ErrorSave INT SET @ErrorSave = 0 -- Do a SELECT using the input parameter. SELECT PreferredName, FullName FROM Application.People WHERE PersonID = @PersonIDParm -- Save any nonzero @@ERROR value. IF (@@ERROR <> 0) SET @ErrorSave = @@ERROR -- Set a value in the output parameter. SELECT @MaxTotal = MAX(OrderDate) FROM Sales.Orders; IF (@@ERROR <> 0) SET @ErrorSave = @@ERROR -- Returns 0 if neither SELECT statement had an error; otherwise, returns the last error. RETURN @ErrorSave GO 21:36:11 От Otus Онлайн : EXEC @ReturnCode = SampleProcedure @PersonIDParm = 19, @MaxTotal = @MaxTotalVariable OUTPUT 21:38:14 От Otus Онлайн : --- USE WideWorldImporters; GO IF OBJECT_ID('Sales.uspGetEmployeeSalesYTD', 'P') IS NOT NULL DROP PROCEDURE Sales.uspGetEmployeeSalesYTD; GO CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD @SalesPerson int, @SalesName varchar(50) OUTPUT AS SET NOCOUNT ON; SELECT @SalesName =FullName FROM Application.People AS sp WHERE PersonID = @SalesPerson; RETURN GO 21:38:25 От Otus Онлайн : -- USE WideWorldImporters; GO -- Declare the variable to receive the output value of the procedure. DECLARE @SalesNameBySalesPerson varchar(50); -- Execute the procedure specifying a last name for the input parameter -- and saving the output value in the variable @SalesYTDBySalesPerson EXECUTE Sales.uspGetEmployeeSalesYTD 18, @SalesName = @SalesNameBySalesPerson OUTPUT; -- Display the value returned by the procedure. PRINT 'Year-to-date sales for this employee is ' + convert(varchar(10),@SalesNameBySalesPerson); GO 21:40:39 От Otus Онлайн : -- v 21:40:42 От Otus Онлайн : USE WideWorldImporters; GO IF OBJECT_ID ( 'dbo.uspCitiesCursor', 'P' ) IS NOT NULL DROP PROCEDURE dbo.uspCitiesCursor; GO CREATE PROCEDURE dbo.uspCitiesCursor @CityCursor CURSOR VARYING OUTPUT AS SET NOCOUNT ON; SET @CityCursor = CURSOR FORWARD_ONLY STATIC FOR SELECT CityID, CityName FROM Application.Cities; OPEN @CityCursor; GO 21:41:21 От Otus Онлайн : --USE WideWorldImporters; GO DECLARE @MyCursor CURSOR; EXEC dbo.uspCitiesCursor @CityCursor = @MyCursor OUTPUT; WHILE (@@FETCH_STATUS = 0) BEGIN; FETCH NEXT FROM @MyCursor; END; CLOSE @MyCursor; DEALLOCATE @MyCursor; GO 21:42:16 От Otus Онлайн : видо что показывал? 21:42:23 От prib : да, все видно 21:42:23 От Джони : да 21:42:53 От Джони : нет 21:45:26 От Алексей Смирнов кому Ведущие вебинара и участники : это аналог while? 21:45:34 От prib : а вроде же еще есть циклы , while 21:45:39 От Алексей Смирнов кому Ведущие вебинара и участники : а разница? 21:48:08 От prib : понятено 21:48:14 От Алексей Смирнов кому Ведущие вебинара и участники : я про разницу курсора и while 21:48:55 От Otus Онлайн : WITH RECOMPILE 21:49:03 От Otus Онлайн : RECOMPILE 21:49:51 От Алексей Смирнов кому Ведущие вебинара и участники : мне нечем 21:50:17 От Алексей Смирнов кому Ведущие вебинара и участники : да 21:50:33 От Otus Онлайн : sp_recompile 21:52:35 От Otus Онлайн : -- USE WideWorldImporters; GO IF OBJECT_ID ( 'dbo.uspProductByCustomers', 'P' ) IS NOT NULL DROP PROCEDURE dbo.uspProductByCustomers; GO CREATE PROCEDURE dbo.uspProductByCustomers @Name varchar(30) = '%' WITH RECOMPILE AS SET NOCOUNT ON; SELECT c.CustomerName AS 'Suct name', ol.StockItemID AS 'Product id' FROM Sales.Customers AS c JOIN Sales.Orders AS so ON so.CustomerID = c.CustomerID JOIN Sales.OrderLines AS ol ON ol.OrderID = ol.OrderID WHERE c.CustomerName LIKE @Name; 21:53:04 От Otus Онлайн : -- USE WideWorldImporters; GO EXECUTE dbo.uspProductByCustomers WITH RECOMPILE; GO 21:54:48 От Otus Онлайн : -- USE WideWorldImporters; GO SELECT OBJECT_DEFINITION (OBJECT_ID(N'WideWorldImporters.dbo.uspProductByCustomers')); 21:55:34 От Otus Онлайн : -- 21:56:26 От Otus Онлайн : -- 21:56:27 От Otus Онлайн : USE WideWorldImporters; GO IF OBJECT_ID ( 'Sales.uspCustomerAllInfo', 'P' ) IS NOT NULL DROP PROCEDURE Sales.uspCustomerAllInfo; GO CREATE PROCEDURE Sales.uspCustomerAllInfo WITH EXECUTE AS CALLER AS SET NOCOUNT ON; SELECT c.CustomerName AS Customer, ol.StockItemID AS 'Product id' FROM Sales.Customers AS c JOIN Sales.Orders AS so ON so.CustomerID = c.CustomerID JOIN Sales.OrderLines AS ol ON ol.OrderID = ol.OrderID ORDER BY c.CustomerName ASC; GO 21:56:44 От Otus Онлайн : -- 21:56:45 От Otus Онлайн : SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent FROM sys.dm_sql_referencing_entities ('Sales.uspCustomerAllInfo', 'OBJECT'); GO 21:57:07 От Otus Онлайн : sys.dm_sql_referenced_entities 21:57:46 От Otus Онлайн : -- SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,referenced_minor_id, referenced_class_desc, is_caller_dependent, is_ambiguous FROM sys.dm_sql_referenced_entities ('Sales.uspCustomerAllInfo', 'OBJECT'); GO 22:06:00 От Otus Онлайн : -- CREATE FUNCTION dbo.ISOweek (@DATE datetime) RETURNS int WITH EXECUTE AS CALLER AS BEGIN DECLARE @ISOweek int; SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104'); --Special cases: Jan 1-3 may belong to the previous year IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1; --Special case: Dec 29-31 may belong to the next year IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1; RETURN(@ISOweek); END; GO --run SET DATEFIRST 1; SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week'; 22:07:21 От Otus Онлайн : -- CREATE FUNCTION Sales.ufn_SalesByCustomer (@customerid int) RETURNS TABLE AS RETURN ( SELECT P.StockItemID, P.StockItemName, SUM(OL.Quantity) AS 'Total' FROM Warehouse.StockItems AS P JOIN Sales.OrderLines AS OL ON OL.StockItemID = P.StockItemID JOIN Sales.Orders AS SO ON SO.OrderID = OL.OrderID JOIN Sales.Customers AS C ON SO.CustomerID = C.CustomerID WHERE SO.CustomerID = @customerid GROUP BY P.StockItemID, P.StockItemName ); GO SELECT * FROM Sales.ufn_SalesByCustomer (2); 22:08:37 От Otus Онлайн : -- SELECT definition, type FROM sys.sql_modules AS m JOIN sys.objects AS o ON m.object_id = o.object_id GO 22:15:06 От Kirill Amurskiy : - 22:15:11 От Kirill Amurskiy : спасибо) 22:15:17 От Алексей Демиденко : - 22:15:18 От prib : тоже, спасибо! 22:15:19 От SergeyProkopchuk : - 22:15:34 От SergeyProkopchuk : спасибо 22:15:39 От Алексей Демиденко : Да, спасибо) 22:15:48 От Сергей : спасибо! 22:16:38 От Алексей Демиденко : Всем пока) Доброй ночи)