เหตุใดฉันจึงได้รับข้อผิดพลาดนี้
โพรซีเดอร์ต้องการพารามิเตอร์ '@statement' ของประเภท 'ntext / nchar / nvarchar'
เมื่อฉันพยายามใช้sp_executesql
?
เหตุใดฉันจึงได้รับข้อผิดพลาดนี้
โพรซีเดอร์ต้องการพารามิเตอร์ '@statement' ของประเภท 'ntext / nchar / nvarchar'
เมื่อฉันพยายามใช้sp_executesql
?
คำตอบ:
ดูเหมือนว่าคุณกำลังเรียกใช้ sp_executesql ด้วยคำสั่ง VARCHAR เมื่อจำเป็นต้องเป็น NVARCHAR
เช่นสิ่งนี้จะทำให้เกิดข้อผิดพลาดเนื่องจาก @SQL ต้องเป็น NVARCHAR
DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
ดังนั้น:
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
วิธีแก้ปัญหาคือใส่ N ไว้หน้าทั้งชนิดและสตริง SQL เพื่อระบุว่าเป็นสตริงอักขระแบบไบต์คู่:
DECLARE @SQL NVARCHAR(100)
SET @SQL = N'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
ฉันพลาดรายละเอียดเล็ก ๆ น้อย ๆ อีกอย่าง: ฉันลืมวงเล็บ "(100)" ที่อยู่ด้านหลัง NVARCHAR