Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ sql
Dynamic T-SQL ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½
Π Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· Π½ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ dynamic T-Sql (Π΄Π°Π»Π΅Π΅ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡ dynamic sql).
ΠΠ»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ dynamic sql? ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ Π΄Π»Ρ ΡΠ΅Π±Ρ. Π ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ dynamic sql ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΡ ΠΎΡΡΠ΅ΡΠΎΠ², Π² Π΄ΡΡΠ³ΠΈΡ β ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ . Π’Π°ΠΊΠΆΠ΅ dynamic sql Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ/ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ/Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π°Π±ΡΡΡΠ΄ΠΎΠΌ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ dynamic sql.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Π§ΡΠΎ ΠΆΠ΅ ΡΡΡ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ? β ΠΠ°ΠΏΡΠΎΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ Π²ΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½Ρ. ΠΠΎ Π²ΡΠ΅ ΠΆΠ΅, Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΡΠΎΠΈΡ:
Π’Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ sp_executesql β ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· OUT ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ dynamic sql.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΎΠ²Π°Ρ (Π΄Π° Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ: ΡΠΎΠ²Π°Ρ, Π°Π½ΠΊΠ΅ΡΠ° Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡΡ, ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π°Π½ΠΊΠ΅ΡΠ°). Π‘ΠΌΡΡΠ» Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ² (Π°ΡΡΠΈΠ±ΡΡΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅Ρ, Π° ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ°ΠΊ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΠΠ β ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
ΠΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½ΡΠΆΠ΅Π½ Π±ΡΠ» ΠΎΡΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ» n ΡΡΡΠΎΠΊ Π½Π° m ΡΡΠΎΠ»Π±ΡΠΎΠ². ΠΠ΄Π΅ m ΠΈ Π±ΡΠ» Π½Π°Ρ Π½Π°Π±ΠΎΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΡΡΠ΅Ρ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ ΠΏΠΎ Π³ΡΡΠΏΠΏΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ· Π³ΡΡΠΏΠΏΡ. ΠΠΎ ΡΠΌΡΡΠ» ΠΎΡΡΠ°Π΅ΡΡΡ Π²ΡΠ΅ ΡΠΎΡ ΠΆΠ΅: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΠ. ΠΠ° Π½Π°Ρ Π²Π·Π³Π»ΡΠ΄, ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ:
Π ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΡΡΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π»Π΅ΠΆΠ°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ:
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΆΠ΅ ΠΌΡ ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ:
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΈΡ Π΅ΡΠ΅ ΡΠ°Π· ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ dynamic sql, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠ°ΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ T-SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² Microsoft SQL Server
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ T-SQL ΠΊΠΎΠ΄Π°, ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π΅ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Microsoft SQL Server.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π² Microsoft SQL Server
Microsoft SQL Server ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Π΅Π· ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π·Π³Π»ΡΠ΄Π° ΠΊΠ°ΠΆΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ PIVOT, Π΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π²ΡΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π½Π°ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ. ΠΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ·Π½Π°Π²Π°ΡΡ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½Π°ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² SQL Π·Π°ΠΏΡΠΎΡ, ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π½Π°ΠΌ ΡΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΡΠ½ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ, Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ PIVOT, ΠΊΡΡΠ°ΡΠΈ, ΡΠ°Π½Π΅Π΅ Ρ ΡΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ PIVOT.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΊΠΈ Π²ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ SQL ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½Π°Ρ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ, ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠΎΠΊ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ + (ΠΏΠ»ΡΡ).
Π Microsoft SQL Server ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΠΎ: ΠΊΠΎΠΌΠ°Π½Π΄Π° EXECUTE ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½Π°Ρ Ρ ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° sp_executesql.
ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π±Π»ΠΈΡΡ TestTable, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ.
ΠΠΎΠΌΠ°Π½Π΄Π° EXECUTE Π² T-SQL
EXECUTE (ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ EXEC) β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ EXEC β ΡΡΠΎ Π½Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ! ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ Π²ΠΎΡ, Π΅ΡΠ»ΠΈ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ.Π΅. ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π²Π½Π΅Π΄ΡΠΈΡΡ Π² Π½Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠ°, Π° ΠΌΡ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌ Π² ΠΠ, Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ EXEC Π² T-SQL
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Ρ ΠΠ°ΠΌΠΈ ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL Π·Π°ΠΏΡΠΎΡ, ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ EXEC.
Π’Π΅ΠΊΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ @SQL_QUERY, Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ @Var1 Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ Π² Π½Π°Ρ Π·Π°ΠΏΡΠΎΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ ΡΡΠ°Π» Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΈΡΠ²ΠΎΠΈΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Ρ ΠΎΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°Π²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ).
ΠΠ»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠΎΠΊ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ + (ΠΏΠ»ΡΡ), ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ @Var1 Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ INT, ΠΏΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΅Π΅ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΌΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ VARCHAR.
ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ SQL Π·Π°ΠΏΡΠΎΡ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ, ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ @SQL_QUERY ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ SELECT.
Π₯ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° sp_executesql Π² T-SQL
sp_executesql β ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½Π°Ρ Ρ ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Microsoft SQL Server, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π΄Π΅Π»Π°Ρ ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° sp_executesql ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΡΠΎΡΡΠΌ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠ΅ΡΠΈΠΉ ΠΈ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π² Π½Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ sp_executesql Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Unicode (ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ NVARCHAR).
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ sp_executesql Π² T-SQL
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ EXEC, ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ Π½Π°Ρ ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ @Var1, ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ sp_executesql.
Π£ ΠΌΠ΅Π½Ρ Π½Π° ΡΡΠΎΠΌ Π²ΡΠ΅, Π½Π°Π΄Π΅ΡΡΡ, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π±ΡΠ» ΠΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π΅ΡΠ»ΠΈ ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° T-SQL, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠΎΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΡΡΡΡ ΠΏΠΎ T-SQL, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , ΠΏΠΎΠΊΠ°!
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL ΠΈ NDS ΠΊΠΎΠΌΠ°Π½Π΄Ρ PL/SQL Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
Π’Π΅ΡΠΌΠΈΠ½ΠΎΠΌ Β«Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQLΒ» ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΡΡΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Β«ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ PL/SQLΒ» Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ΅Π»ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° PL/SQL, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠΎΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ NDS Π² PL/SQL
ΠΠΎΠΌΠ°Π½Π΄Ρ EXECUTE IMMEDIATE ΠΈ OPEN FOR Π½Π΅ Π±ΡΠ΄ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Oracle Forms Builder ΠΈ Oracle Reports Builder Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²Π΅ΡΡΠΈΡ PL/SQL ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π΄ΠΎ Oracle8i ΠΈ Π²ΡΡΠ΅. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ; ΡΡΠΈ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ PL/SQL.
ΠΠΎΠΌΠ°Π½Π΄Π° EXECUTE IMMEDIATE
ΠΠΎΠΌΠ°Π½Π΄Π° EXECUTE IMMEDIATE ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL. ΠΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
ΠΠΎΠΌΠ°Π½Π΄Π° execute immediate ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ° PL/SQL. Π‘ΡΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡ Π΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ²).
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ DDL Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΒΡΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅, ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ DDL, ΠΎΡΡΠ°ΠΆΠ°Π»ΠΎΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ DDL Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ auton_ddl.sql.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π΅ ΡΠ΄ΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π² SQL-ΡΡΡΠΎΠΊΠ΅ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, :salary_value )
ΠΡΠΎΡΠ΅ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ, Π²Π΅ΡΠ½ΠΎ?
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ exec_ddl ΡΠΎΡ ΠΆΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ WHERE :
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ employees:
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° EXECUTE IMMEDIATE ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL ΠΈ Π±Π»ΠΎΠΊΠΈ PL/SQL Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ.
ΠΠΎΠΌΠ°Π½Π΄Π° OPEN FOR
ΠΠΎΠΌΠ°Π½Π΄Π° OPEN FOR ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π±ΡΠ»Π° Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² PL/SQL Π΄Π»Ρ NDS ; ΠΎΠ½Π° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² Oracle7 ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π»Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΡΡΠΎΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ. ΠΠ°ΡΠ΅ΠΌ Π΅Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π±ΡΠ» ΡΠ°ΡΡΠΈΡΠ΅Π½ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΒΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° DBMS_SQL ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ: ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π±ΠΎΡ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ β ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ°. ΠΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²Π΅ΡΡΠΌΠ° Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ.
ΠΠ»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Oracle ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ OPEN, Π½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΠ»ΠΈ Π΅Π³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏ REF CURSOR ΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° Π½Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ- ΠΊΡΡΡΠΎΡ, Π° Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ OPEN FOR ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΠΎΡ:
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° (ΡΠΎ Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡ ΡΡΡΠΎΠΊ) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π² ΡΡΡΠΎΠΊΠ°Ρ , ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΠΈΠΈ WHERE (ΡΡΠΎΠ»Π±Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΡΠ»Π°, Π΄Π°ΡΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΠΉΠ» showcol.sp):
ΠΡΠΈΠΌΠ΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π‘ΡΠΎΠ»Π±ΡΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ:
ΠΡΠ±ΠΎΡΠΊΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ
ΠΠΎΠΌΠ°Π½Π΄Π° FETCH Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ showcol ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΡΠ±ΠΎΡΠΊΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π²ΡΠ±ΠΎΡΠΊΠ° Π² ΡΠ΅ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ :
Π Π°Π±ΠΎΡΠ° Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ FETCH ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠΉ ΠΈ Π½Π΅ΒΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎΠΉ; Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ FETCH ΠΈ Ρ. Π΄. Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, NDS ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π²ΡΠ±ΠΎΡΠΊΡ Π² Π·Π°ΠΏΠΈΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SELECT * Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ; Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΡΠ½ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄Π²Π°-ΡΡΠΈ, ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°. ΠΡΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ Π·Π°ΠΏΠΈΡΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°Π·Π½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ. ΠΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΒΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠΎΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
Π‘ ΡΠ°ΠΊΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘Π΅ΠΊΡΠΈΡ USING Π² OPEN FOR
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° OPEN FOR ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π° ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ΅ΠΊΡΠΈΡ USING :
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ showcol Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠ², ΠΏΡΠΈΠ½ΡΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ Π² 1982 Π³ΠΎΠ΄Ρ:
Π ΡΠ΅ΡΡΡΠ΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL
Π’Π°Π±Π»ΠΈΡΠ° 1. Π§Π΅ΡΡΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL
ΡΠΈΠΏ | ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΎΠΌΠ°Π½Π΄Ρ NDS |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 1 | ΠΠ΅Π· Π·Π°ΠΏΡΠΎΡΠΎΠ²; ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ DDL ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ UPDATE, INSERT, MERGE ΠΈ DELETE Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² | EXECUTE IMMEDIATE Π±Π΅Π· ΡΠ΅ΠΊΡΠΈΠΉ USING ΠΈ INTO |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 2 | ΠΠ΅Π· Π·Π°ΠΏΡΠΎΡΠΎΠ²; ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ DDL ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ UPDATE, INSERT, MERGE ΠΈ DELETE Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² | EXECUTE IMMEDIATE Ρ ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ USING |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 3 (ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°) | ΠΠ°ΠΏΡΠΎΡΡ (SELECT) Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Ρ Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ | EXECUTE IMMEDIATE Ρ ΡΠ΅ΠΊΡΠΈΡΠΌΠΈ USING ΠΈ INTO |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 3 (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ) | ΠΠ°ΠΏΡΠΎΡΡ (SELECT) Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Ρ Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ | EXECUTE IMMEDIATE Ρ ΡΠ΅ΠΊΡΠΈΡΠΌΠΈ USING ΠΈ BULK COLLECT INTO ΠΈΠ»ΠΈ OPEN FOR Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 4 | ΠΠΎΠΌΠ°Π½Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ
ΡΡΠΎΠ»Π±- ΡΠΎΠ² (Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ°) ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π΄ΠΎ ΡΡΠ°Π΄ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ | ΠΠ»Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 4 Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ DBMS_SQL |
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 1
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° DDL ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 1:
ΠΠΎΠΌΠ°Π½Π΄Π° UPDATE ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ SQL ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 1, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅Π΄ΠΈΠ½ΒΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ Π°ΡΠΏΠ΅ΠΊΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ β ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ:
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 2
ΠΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±Π° ΠΆΠ΅ΡΡΠΊΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ DML ΡΠΎΡΒΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ), ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 2:
Π‘Π΅ΠΊΡΠΈΡ USING ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΡΡΡΠΎΠΊΡ SQL ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·ΒΠ±ΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 3
ΠΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 3 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π±Π΅Π· Π½ΠΈΡ ). ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠΈΠΌΠ΅Ρ:
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 4
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΌΡΠΉ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ: Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 4. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ:
Π ΡΡΠ°ΡΡΡΡ, ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ 4, Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅Π΄ΠΊΠΎ.
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ SQL Π² ODBC
Ρ ΠΎΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ SQL Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π·Π°ΡΠ°Π½Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅ΡΡΠΈ Π·Π°ΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π‘Π£ΠΠ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΡΠΌΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ SQL Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ dynamic SQL. Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ SQL, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ SQL ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ·Π»Π° ΡΡΡΠΎΠΊΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² Π‘Π£ΠΠ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ±Π΄ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ»Π°Π½ Π΄ΠΎΡΡΡΠΏΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ SQL ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ SQL. ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ SQL, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ dynamic SQL Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ SQL. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π‘Π£ΠΠ; ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ SQL Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ dynamic SQL β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ execute IMMEDIATE. ΡΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ SQL Π² ΡΡΠ±Π΄ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ EXECUTE IMMEDIATE ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΡΠ±Π΄ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠΉΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΏΡΡΠΈ ΡΠ°Π³ΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° SQL ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π΅ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°, Π΅ΡΠ»ΠΈ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ.
ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΡΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ SQL Π² Π±ΡΡΠ΅ΡΠ΅ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ EXECUTE IMMEDIATE. ΠΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΡΠ·Π»ΠΎΠ² Π²ΠΎΠΏΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ (?) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. ΠΠΎΠΏΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π½Π°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΊΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ SQL ΡΡΠ±Π΄ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ PREPARE, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠ±Π΄ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π»Ρ Π½Π΅Π΅ ΠΏΠ»Π°Π½ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ EXECUTE (Π° Π½Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ EXECUTE IMMEDIATE) Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PREPARE ΠΏΠΎΠ·ΠΆΠ΅. ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΡ SQL ΠΈΠ»ΠΈ ΡΠΊΠ»Π΄Π°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ EXECUTE, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ SQL. Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ SQL ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π³Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ SQL ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΈ ΡΠ°Π³ΠΈ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ EXECUTE. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΡΡΡΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ SQL.
SPBDEV Blog
ΠΠ°ΠΊ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL Π² Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL; ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΈ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ sp_executesql ΠΈ EXECUTE () ΠΈΠ· Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° Microsoft SQL Server Management ΠΈ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½ΡΡ , AdventureWorks ΠΈ WideWorldImporters.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL Π² Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ SQL, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ, Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ SQL. ΠΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ Π·Π°ΠΏΠΈΡΠ°Π½, Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL:
SELECT JobTitle, Count(BusinessEntityID)
WHERE Year(BirthDate) = 1970
SELECT JobTitle, Count(BusinessEntityID)
WHERE Year(BirthDate) = 1971
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΅ΡΡΡ Π΄Π²Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠΌΠ΅ JobTitles Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π»Π΅Ρ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π³ΠΎΠ΄ Π½Π° Π»Π΅ΡΡ?
ΠΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ Π²ΡΡΡΠΏΠ°Π΅Ρ Π² ΠΈΠ³ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL.
ΠΠ°ΡΠ΅ΠΌ Π² ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL:
DECLARE @birthYear int = 1970
DECLARE @statement NVARCHAR(4000)
SELECT JobTitle, Count(BusinessEntityID)
WHERE Year(BirthDate) = ‘ + CAST(@birthYear as NVARCHAR) +
EXECUTE sp_executesql @statement
SET @birthYear = @birthYear + 1
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL Π²ΡΠ΄Π΅Π»Π΅Π½ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ. ΠΡΠΎ SQL, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ @birthYear. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ SQL ΠΎΠ½ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² @statement. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ sp_executesql, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠ±ΡΡΡΠ½ΠΈΠΌ Π½ΠΈΠΆΠ΅.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² sp_executesql
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sp_executeslq Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ SQL, Ρ ΡΠ°Π½ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π€ΠΎΡΠΌΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
EXECUTE sp_executesql @statement.
ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
DECLARE @statement NVARCHAR(4000)
SET @statement = N’SELECT getdate()’
EXECUTE sp_executesql @statement
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎ Π² ΠΎΠΊΠ½Π΅ Π·Π°ΠΏΡΠΎΡΠ°, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ sp_executeslq, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Π°Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΈΠ±ΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ LineTotal, Π»ΠΈΠ±ΠΎ ΡΡΠΌΠΌΡ LineTotal ΠΏΠΎ ProductID Π΄Π»Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π² 2011 Π³ΠΎΠ΄Ρ.
ΠΠ°ΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Ρ ΠΎΡΠ΅Π»ΠΎ Π±Ρ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ Ρ ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°. Π₯ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ @ReturnAverage. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ, ΡΠΎ Π²Ρ Π²Π΅ΡΠ½Π΅ΡΠ΅ ΡΡΠ΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΌΠΌΡ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅, Π½ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²Π΅ΡΠ΅Π»ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎ Π±Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
CREATE PROCEDURE uspCalcuateSalesSummaryStatic
IF (@returnAverage = 1)
AVG(SOD.LineTotal) as ResultAvg
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHEader SOH
ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE YEAR(SOH.ShipDate) = 2011
GROUP BY SOD.ProductID
SUM(SOD.LineTotal) as ResultSum
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHEader SOH
ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE YEAR(SOH.ShipDate) = 2011
GROUP BY SOD.ProductID
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π°Π±ΡΠΌ ΠΌΠ΅ΡΡΠΎΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²ΡΠ΄Π΅Π»ΠΈΠ» ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ ΠΊΡΡΡΠΈΠ²ΠΎΠΌ.
ΠΡΠΈ Π²ΡΠ΅ΠΉ ΡΡΠΎΠΉ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ SQL. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ!
CREATE PROCEDURE uspCalcuateSalesSummaryDynamic
DECLARE @statement NVARCHAR(4000),
IF (@returnAverage = 1) SET @function = ‘Avg’
ELSE SET @function = ‘Sum’
@function + + ‘(SOD.LineTotal) as Result’ + @function + ‘
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHEader SOH
ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE YEAR(SOH.ShipDate) = 2011
GROUP BY SOD.ProductID’
EXECUTE sp_executesql @statement
ΠΠ΄Π΅ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΡΡ ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ SQL, ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ AVG, Π΄ΡΡΠ³ΠΎΠΉ Π΄Π»Ρ SUM, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ Β«Π½Π° Π»Π΅ΡΡΒ».
ΠΡΠ»Π°Π΄ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ SQL Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°:
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΊΠΎΠ΄.
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Execute, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π°Π²Π΅Π΄ΠΈΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π½Π° @statement, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΎΡ.
ΠΡΠ»Π°Π΄ΡΠΈΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΡΠ½ΡΠΌ ΠΈ Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. Π― Π±Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π·Π΄Π΅ΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ sp_executesql Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sp_executesql Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΡΠΎ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π΄Π΅Π»Π°Π΅Ρ Π²Π°Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΡΠΌΡ:
EXECUTE sp_executesql @statement, @parameterDefinition, @parm1=value1β¦, @parm2=value2, β¦
ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΡΠ½ΠΈΠΌ Π΄Π΅ΡΠ°Π»ΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π·Π°Π΄Π°Π²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π² ΡΡΡΠΎΠΊΠ΅ @parameterDefinition.
ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄Π²Π° ΡΠΈΡΠ»Π°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ:
DECLARE @statement NVARCHAR(4000)
DECLARE @parameterDefinition NVARCHAR(4000)
SET @statement = N’SELECT @a + @b’
SET @parameterDefinition = N’@a int, @b int’
ΠΡΠ΄Π΅Π»Π΅Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ SQL, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
ΠΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ sp_executesql.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ sp_executesql Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠΈΠΌ Π΅Π³ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΆΠ΅ΡΡΠΊΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ shipDate Π² Π·Π°ΠΏΡΠΎΡΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π²Π΅Π΄Π΅ΠΌ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π³ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΡΠΎΠΌΠ΅ 2011 Π³ΠΎΠ΄Π°.
Π§ΡΠΎΠ±Ρ Π²Π½Π΅ΡΡΠΈ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π½Π°ΡΡ Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΠΎΡ. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ sp_executesql Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Π°Ρ Ρ ΡΠ°Π½ΠΈΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½ΠΈΠΆΠ΅.
CREATE PROCEDURE uspCalcuateSalesSummaryDynamic2
DECLARE @statement NVARCHAR(4000),
IF (@returnAverage = 1) SET @function = ‘Avg’
ELSE SET @function = ‘Sum’
SET @parameterDefinition = ‘@shipDateYear int’
@function + + ‘(SOD.LineTotal) as Result’ + @function + ‘
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHEader SOH
ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE YEAR(SOH.ShipDate) = @shipDateYear
GROUP BY SOD.ProductID’
EXECUTE sp_executesql @statement, @parameterDefinition, @shipDateYear=@shipDate
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎ, ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ procpackSalesSummaryDynamic2 proc ΠΈΠ· ΠΎΠΊΠ½Π° Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
EXECUTE uspCalcuateSalesSummaryDynamic2 1,2011
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠΌ @shipDateYear ΠΈ @shipDate Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡ ΠΈΡΠΊΠ»ΡΡΠΈΠΌ @shipDateYear ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅:
CREATE PROCEDURE uspCalcuateSalesSummaryDynamic2
DECLARE @statement NVARCHAR(4000),
IF (@returnAverage = 1) SET @function = ‘Avg’
ELSE SET @function = ‘Sum’
SET @parameterDefinition = ‘@shipDate int’
@function + + ‘(SOD.LineTotal) as Result’ + @function + ‘
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHEader SOH
ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE YEAR(SOH.ShipDate) = @shipDate
GROUP BY SOD.ProductID’
EXECUTE sp_executesql @statement, @parameterDefinition, @shipDate
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ EXECUTE Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ SQL @shipDateYear ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ parameter @ shipDate.
ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΎΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π»ΡΡΡΠ΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΡΡΠ»Π΅Π½Π½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ SQL.
ΠΠ°ΠΏΡΡΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL Ρ ΠΏΠΎΠΌΠΎΡΡΡ EXECUTE ()
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ EXEC ΠΈΠ»ΠΈ EXECUTE Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL. Π€ΠΎΡΠΌΠ°Ρ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
DECLARE @statement NVARCHAR(4000)
SET @statement = N’SELECT getdate()’
ΠΠ°ΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ @statement Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ EXECUTE ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ @statement, ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL ΠΎΠ½Π° ΡΠ΅ΡΠΈΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
Msg 2812, Level 16, State 62, Line 3
Could not find stored procedure ‘SELECT getdate()’.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π΄Π°Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ! ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ.
sp_executesql ΠΏΡΠΎΡΠΈΠ² EXECUTE
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sp_executesql Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ EXECUTE. ΠΠ°ΠΊΠΎΠ²Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ?
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Microsoft ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sp_executesql Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ SQL: