ไวยากรณ์พื้นฐานของคำสั่ง SQL แบบไดนามิก
1: คำสั่ง SQL ทั่วไปสามารถดำเนินการกับ Exec ได้
เช่น เลือก * จาก tableName
Exec('เลือก * จากชื่อตาราง')
Exec sp_executesql N'select * from tableName' -- โปรดทราบว่าต้องเพิ่ม N ก่อนสตริง
2: เมื่อใช้ชื่อฟิลด์ ชื่อตาราง ชื่อฐานข้อมูล ฯลฯ เป็นตัวแปร จะต้องใช้ Dynamic SQL
เช่น:
ประกาศ @fname varchar (20)
ตั้ง @fname = 'ชื่อไฟล์'
เลือก @fname จาก tableName -- ข้อผิดพลาด จะไม่มีการแจ้งเตือนข้อผิดพลาด แต่ผลลัพธ์จะเป็นค่าคงที่ FiledName ซึ่งไม่ใช่สิ่งที่คุณต้องการ
Exec('select ' + @fname + ' from tableName') -- โปรดทราบว่ามีการเว้นวรรครอบเครื่องหมายคำพูดเดี่ยวก่อนและหลังเครื่องหมายบวก
แน่นอน คุณยังสามารถเปลี่ยนสตริงเป็นรูปแบบตัวแปรได้
ประกาศ @fname varchar (20)
set @fname = 'FiledName' --ตั้งชื่อฟิลด์
ประกาศ @s varchar (1,000)
set @s = 'เลือก ' + @fname + ' จาก tableName'
ผู้บริหาร(@s) -- ความสำเร็จ
exec sp_executesql @s -- ประโยคนี้จะรายงานข้อผิดพลาด
ประกาศ @s Nvarchar(1000) -- โปรดทราบว่ามันถูกเปลี่ยนเป็น nvarchar(1000)
set @s = 'เลือก ' + @fname + ' จาก tableName'
ผู้บริหาร(@s) -- ความสำเร็จ
exec sp_executesql @s -- ประโยคนี้ถูกต้อง
3. พารามิเตอร์เอาต์พุต
ประกาศ @num int,
@sqls nvarchar (4000)
set @sqls='select count(*) from tableName'
ผู้บริหาร(@sqls)
--จะใส่ผลการดำเนินการ exec ลงในตัวแปรได้อย่างไร?
ประกาศ @num int,
@sqls nvarchar (4000)
ตั้ง @sqls='select @a=count(*) จาก tableName '
exec sp_executesql @sqls,N'@a int output',@num เอาท์พุต
เลือก @num
หากคุณต้องการใช้เครื่องหมายคำพูดเดี่ยว '' ในสตริงคำสั่ง SQL คุณสามารถใช้ ''''