Harus mendeklarasikan variabel skalar

@RowFrom int

@RowTo int

keduanya Global Input Params untuk Disimpan Prosedur, dan karena saya menyusun query SQL di dalam Stored Procedure dengan T-SQL kemudian menggunakan Exec(@sqlstatement) di akhir stored procedure untuk menampilkan hasilnya, itu memberi saya kesalahan ini ketika saya mencoba untuk menggunakan @RowFrom atau @RowTo dalam @sqlstatement variabel yang dieksekusi.. itu bekerja dengan baik jika tidak.. mohon bantuan.

"Must declare the scalar variable "@RowFrom"."

Juga, saya mencoba termasuk yang berikut dalam @sqlstatement variabel:

'Declare @Rt int'
'SET @Rt = ' + @RowTo

tapi @RowTo masih doesn't lulus nilainya untuk @Rt dan menghasilkan sebuah kesalahan.

Mengomentari pertanyaan (1)
Larutan

Anda dapat't menggabungkan int ke string. Bukannya:

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

Yang anda butuhkan:

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

Untuk membantu menggambarkan apa yang's terjadi di sini. Let's mengatakan @RowTo = 5.

DECLARE @RowTo INT;
SET @RowTo = 5;

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT ' + CONVERT(VARCHAR(12), @RowTo) + ' * 5';
EXEC sp_executeSQL @sql;

Dalam rangka untuk membangun yang menjadi string (bahkan jika pada akhirnya itu akan menjadi nomor), saya perlu untuk mengubahnya. Tapi seperti yang anda lihat, jumlah ini masih diperlakukan sebagai angka ketika itu's dieksekusi. Jawabannya adalah 25, kan?

Dalam kasus anda, anda don't benar-benar perlu untuk kembali menyatakan @Rt dll. di dalam @string sql, anda hanya perlu untuk mengatakan:

SET @sql = @sql + ' WHERE RowNum BETWEEN ' 
    + CONVERT(VARCHAR(12), @RowFrom) + ' AND ' 
    + CONVERT(VARCHAR(12), @RowTo);

Meskipun akan lebih baik untuk memiliki tepat demikian, misalnya

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

EXEC sp_executesql @sql,
  N'@RowFrom INT, @RowTo INT',
  @RowFrom, @RowTo;
Komentar (4)

Just FYI, aku tahu ini adalah sebuah posting lama, tapi tergantung pada database PEMERIKSAAN pengaturan anda dapat mendapatkan error ini pada sebuah pernyataan seperti ini,

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

jika misalnya anda typo S di

SET @sql = @***S***ql 

maaf untuk spin off jawaban sudah diposting di sini, tapi ini sebenarnya adalah contoh dari kesalahan yang dilaporkan.

Perhatikan juga bahwa kesalahan tidak akan menampilkan modal S di pesan, saya tidak yakin mengapa, tapi saya pikir itu adalah karena

Set @sql =

di sebelah kiri dari tanda sama dengan.

Komentar (1)

Hanya menambahkan apa yang ditetapkan untuk saya, di mana kesalahan ejaan adalah tersangka sesuai [ini blog MSDN][1]...

Ketika membelah SQL string lebih dari beberapa baris, periksa bahwa anda sedang koma memisahkan string SQL dari parameter anda (dan tidak mencoba untuk menggabungkan mereka!) dan tidak ada spasi di akhir masing-masing garis pemisah. Bukan ilmu roket tapi harapan saya menyelamatkan seseorang sakit kepala.

Misalnya:


db.TableName.SqlQuery(
    "SELECT Id, Timestamp, User " +
    "FROM dbo.TableName " +
    "WHERE Timestamp >= @from " +
    "AND Timestamp 
Komentar (0)

Anda juga bisa mendapatkan pesan kesalahan ini jika sebuah variabel dideklarasikan sebelum `PERGI ' dan dirujuk setelah itu.

Melihat ini pertanyaan dan ini solusi.

Komentar (0)

Kasus Sensitivitas akan menyebabkan masalah ini, terlalu.

@MyVariable dan @myvariable adalah variabel-variabel yang sama dalam SQL Server laki-Laki. Studio dan akan bekerja. Namun, variabel-variabel ini akan menghasilkan "Harus mendeklarasikan variabel skalar "@MyVariable" di Visual Studio (C#) karena untuk kasus-perbedaan sensitivitas.

Komentar (0)

Hanya jawaban untuk masa depan saya (mungkin itu membantu orang lain juga!). Jika anda mencoba untuk menjalankan sesuatu seperti ini di editor kueri:

USE [Dbo]
GO

DECLARE @RC int

EXECUTE @RC = [dbo].[SomeStoredProcedure] 
   2018
  ,0
  ,'arg3'
GO

SELECT month, SUM(weight) AS weight, SUM(amount) AS amount 
FROM SomeTable AS e 
WHERE year = @year AND type = 'M'

Dan anda mendapatkan error:

Harus mendeklarasikan variabel skalar "@tahun"

Yang's karena anda sedang mencoba untuk menjalankan sekelompok kode yang mencakup BAIK disimpan prosedur pelaksanaan DAN query di bawah ini (!). Hanya menyoroti salah satu yang ingin anda jalankan atau hapus/komentar yang anda tidak tertarik.

Komentar (0)