Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Harus mendeklarasikan variabel skalar

Anda tidak dapat menggabungkan int ke string. Alih-alih:

SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;

Anda membutuhkan:

SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);

Untuk membantu mengilustrasikan apa yang terjadi di sini. Katakanlah @RowTo =5.

DECLARE @RowTo int;
SET @RowTo = 5;

DECLARE @sql nvarchar(max);
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
EXEC sys.sp_executesql @sql;

Untuk membuatnya menjadi string (bahkan jika pada akhirnya itu akan menjadi angka), saya perlu mengubahnya. Tapi seperti yang Anda lihat, nomor tersebut masih diperlakukan sebagai nomor saat dijalankan. Jawabannya adalah 25, kan?

Dalam kasus Anda, Anda dapat menggunakan parameterisasi yang tepat daripada menggunakan rangkaian yang, jika Anda terbiasa dengan kebiasaan itu, Anda akan mengekspos diri Anda ke injeksi SQL di beberapa titik (lihat ini dan ini:

SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';

EXEC sys.sp_executesql @sql,
  N'@RowFrom int, @RowTo int',
  @RowFrom, @RowTo;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan/Mengapa menggunakan Cascading di SQL Server?

  2. Cara MENGUBAH beberapa kolom sekaligus di SQL Server

  3. Masukkan hasil prosedur tersimpan ke dalam tabel sementara

  4. Ubah tipe yang ditentukan pengguna di SQL Server

  5. Tetapkan Pasangan Kunci/Nilai dalam Konteks Sesi di SQL Server (sp_set_session_context)