@RowFrom int
@RowTo int
her ikisi de Saklı Yordam için Global Giriş Parametreleridir ve SQL sorgusunu T-SQL ile Saklı Yordam içinde derlediğimden ve ardından sonucu göstermek için saklı yordamın sonunda Exec(@sqlstatement)
kullandığımdan, çalıştırılan @sqlstatement
değişkeninin içinde @RowFrom
veya @RowTo
kullanmaya çalıştığımda bana bu hatayı veriyor. aksi takdirde iyi çalışıyor. lütfen yardım edin.
"Must declare the scalar variable "@RowFrom"."
Ayrıca, @sqlstatement
değişkenine aşağıdakileri eklemeyi denedim:
'Declare @Rt int'
'SET @Rt = ' + @RowTo
ancak @RowTo
hala değerini @Rt
ye aktarmıyor ve bir hata üretiyor.
Bir int ile bir dizeyi birleştiremezsiniz. Bunun yerine:
SET @sql = N'DECLARE @Rt INT; SET @Rt = ' + @RowTo;
İhtiyacın var:
SET @sql = N'DECLARE @Rt INT; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Burada neler olduğunu açıklamaya yardımcı olmak için. Diyelim ki @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;
Bunu bir dizeye dönüştürmek için (sonuçta bir sayı olacak olsa bile) dönüştürmem gerekiyor. Ancak gördüğünüz gibi, sayı çalıştırıldığında hala bir sayı olarak ele alınıyor. Cevap 25, değil mi?
Sizin durumunuzda @sql dizesi içinde @Rt vb. ifadeleri yeniden beyan etmenize gerek yoktur, sadece şunu söylemeniz yeterlidir:
SET @sql = @sql + ' WHERE RowNum BETWEEN '
+ CONVERT(VARCHAR(12), @RowFrom) + ' AND '
+ CONVERT(VARCHAR(12), @RowTo);
Yine de uygun parametrelendirmeye sahip olmak daha iyi olacaktır, örn.
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sp_executesql @sql,
N'@RowFrom INT, @RowTo INT',
@RowFrom, @RowTo;
Bilginize, bunun eski bir gönderi olduğunu biliyorum, ancak veritabanı COLLATION ayarlarına bağlı olarak aşağıdaki gibi bir ifadede bu hatayı alabilirsiniz,
SET @sql = @Sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
örneğin S harfini yazım hatası yaparsanız
SET @sql = @***S***ql
Burada zaten yayınlanmış olan yanıtları saptırdığım için özür dilerim, ancak bu bildirilen hatanın gerçek bir örneğidir.
Ayrıca hatanın mesajda büyük S harfini göstermeyeceğini de unutmayın, nedeninden emin değilim, ancak sanırım bunun nedeni
Set @sql =
eşittir işaretinin solundadır.
Harf Hassasiyeti de bu soruna neden olacaktır.
SQL Server Man'de @MyVariable ve @myvariable aynı değişkenlerdir. Studio'da aynı değişkenlerdir ve çalışacaklardır. Ancak, bu değişkenler büyük/küçük harf duyarlılığı farklılıkları nedeniyle Visual Studio'da (C#) "@MyVariable" skaler değişkenini bildirmelidir.