CREATE TABLE users (
user_id INT identity(1, 1) PRIMARY KEY --ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
,user_name NVARCHAR(100) NOT NULL --Π€ΠΠ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
)
CREATE TABLE groups (
group_id INT PRIMARY KEY --ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΡΡΠΏΠΏΡ
,group_name NVARCHAR(100) NOT NULL --ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏΡ
,members_count INT NOT NULL --ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π³ΡΡΠΏΠΏΡ
)
CREATE TABLE user_groups (
group_id INT
,user_id INT
)
INSERT INTO users (user_name)
VALUES (N'ΠΠ»Π΅ΠΊΡΠ΅Π΅Π² Π.Π.')
,(N'ΠΠΈΡΠΊΡΠ½ Π.Π.')
,(N'ΠΡΡΠ°ΠΌΠΎΠ½ΠΎΠ² Π.Π.')
,(N'ΠΠΈΡ
Π°ΡΡΠ² Π.Π.')
,(N'Π’ΠΈΠΌΠ°ΡΠΎΠ² Π.Π.')
,(N'ΠΡΡΠ°ΡΠΎΠ² Π.Π‘.')
,(N'ΠΡΠ°ΡΠ½ΠΎΠ² Π.Π.')
,(N'ΠΠΈΡΠ°Π½ΠΊΠΈΠ½ Π.Π.')
,(N'ΠΠ΅Π±Π΅Π΄Π΅Π² Π.Π.')
,(N'Π’ΠΈΡ
ΠΎΠΌΠΈΡΠΎΠ² Π€.Π.')
INSERT INTO groups (
group_id
,group_name
,members_count
)
VALUES (
1
,N'ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ'
,1
)
,(
2
,N'ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ'
,3
)
,(
3
,N'Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΡ'
,4
)
,(
4
,N'Π’Π΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ'
,3
)
go
/**
ΠΠΎΠΏΡΠΎΡ: ΠΡΡΡΠΎΡΡ. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅? ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Ρ?
ΠΠ°Π΄Π°Π½ΠΈΠ΅: Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² ΠΊΡΡΡΠΎΡΠ΅ Π½ΠΈΠΆΠ΅? (5 ΠΌΠΈΠ½ΡΡ)
*/
DECLARE S CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR
SELECT group_id
,members_count
FROM groups
DECLARE @iGroupId INT
,@iMembersCount INT
OPEN S
FETCH NEXT
FROM s
INTO @iGroupId
,@iMembersCount
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO user_groups (
user_id
,group_id
)
SELECT TOP (@iMembersCount) u.user_id
,@iGroupId
FROM users AS u
ORDER BY NEWID()
FETCH NEXT
FROM s
INTO @iGroupId
,@iMembersCount
END
CLOSE s
DEALLOCATE S
go
/**
ΠΠΎΠΏΡΠΎΡ: ΠΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ (JOIN, Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ; APPLY, Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ)?
ΠΠ°Π΄Π°Π½ΠΈΠ΅: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ (groups) Π²ΡΠ²Π΅ΡΡΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°
(ΡΠΎΡΡΠΈΠΎΡΠ²ΠΊΠ° Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅) (10-12 ΠΌΠΈΠ½ΡΡ)
*/
SELECT
t1.group_name
,t1.user_name
FROM(
SELECT
group_name
,u.user_name
,ROW_NUMBER () OVER (PARTITION BY us.group_id order by user_name) AS 'num'
FROM users as u
JOIN user_groups AS us
ON us.user_id = u.user_id
JOIN groups AS g
ON g.group_id = us.group_id
) AS t1
WHERE num = 2
GO
/**
ΠΠΎΠΏΡΠΎΡ: ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΡΠΎΠ±Ρ Π΅Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ?
ΠΠ°Π΄Π°Π½ΠΈΠ΅: ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. (ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄ ΠΈ ΡΠ΅ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ) (5 ΠΌΠΈΠ½ΡΡ)
*/
CREATE PROCEDURE processingErrors
AS
BEGIN TRY
DECLARE @nNumber NUMERIC(17, 2) = 10.00
,@nResult NUMERIC(17, 2)
BEGIN TRANSACTION
SET @nResult = @nNumber / 0
COMMIT
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
IF(@@TRANCOUNT > 0)
ROLLBACK
END CATCH
go
EXEC processingErrors
go
/**
ΠΠΎΠΏΡΠΎΡ: ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL: ΡΠ°ΡΡΠΊΠ°ΠΆΠΈ ΠΏΡΠΎ ΠΎΠΏΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
*/
/**
ΠΠΎΠΏΡΠΎΡ: ΠΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ· 20 ΠΏΠΎΠ»Π΅ΠΉ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ. ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ?
*/
/**
ΠΠΎΠΏΡΠΎΡ:
Π Π°Π·Π±ΠΎΡ XML. ΠΠ΅ΡΠΎΠ΄ nodes
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ XML. ΠΠ΅ΡΠΎΠ΄ modify
Π‘Π±ΠΎΡ XML ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ
XML. Π’ΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ XML
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡ
Π΅ΠΌ Π΄Π»Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ XML
ΠΠ°Π΄Π°Π½ΠΈΠ΅:
1. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ
ΠΌΠ» Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π±Π»ΠΈΡΡ (Π Π°Π·Π±ΠΎΡ xml). (5 ΠΌΠΈΠ½ΡΡ)
2. ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° value = '9988776655 Π΄Π»Ρ Π½ΠΎΠ΄Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π°ΡΡΠΈΠ±ΡΡ ext_id=tax_code (3 ΠΌΠΈΠ½ΡΡΡ)
3. Π£Π΄Π°Π»ΠΈΡΡ ΠΈΠ· xml ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ext_id=client_type (3 ΠΌΠΈΠ½ΡΡΡ)
*/
DECLARE @xXml XML = '<dataset>
<object ext_id="client_id" value="300000001" />
<object ext_id="branch_id" value="044525104" />
<object ext_id="tax_code" value="001122334455" />
<object ext_id="client_type" value="J" />
</dataset>'
CREATE table #tableXML(
ext_id VARCHAR(32),
value VARCHAR(32)
)
INSERT INTO #tableXML (ext_id, value)
select
msg.value('@ext_id', 'VARCHAR(32)') as ext_id,
msg.value('@value', 'VARCHAR(32)') as value
FROM @xXml.nodes('//dataset/*') as dataset(msg)
SELECT ext_id, value FROM #tableXML;
GO
/**
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
ΠΠΎΠΏΡΠΎΡ: Π±ΠΎΠ»ΡΡΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π»ΠΊΠΈΡ
. Π§ΡΠΎ Π±ΡΡΡΡΠ΅Π΅?
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°Π½ Π·Π°ΠΏΡΠΎΡΠ°?
ΠΠΎΠΏΡΠΎΡ: ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡ: ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ,
ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΠΈ
Git
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ git? ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ?
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π²Π΅ΡΠΊΠ°? ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Ρ Π²Π΅ΡΠΊΠΈ?
ΠΠ°ΠΊ ΡΠ΅ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΏΡΠΈ ΡΠ»ΠΈΡΠ½ΠΈΠΈ?
*/