kzen.dev
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 bill
bill
Question

Musí deklarovať skalárnu premennú

@RowFrom int

@RowTo int

sú obidva globálne vstupné parametre pre uloženú procedúru a keďže kompilujem SQL dotaz vo vnútri uloženej procedúry pomocou T-SQL a potom používam Exec(@sqlstatement) na konci uloženej procedúry na zobrazenie výsledku, tak mi to dáva túto chybu, keď sa pokúsim použiť @RowFrom alebo @RowTo vo vnútri premennej @sqlstatement, ktorá sa vykonáva.. inak to funguje dobre.. prosím o pomoc.

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

Tiež som skúsil zahrnúť nasledujúce údaje do premennej @sqlstatement:

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

ale @RowTo stále neprenáša svoju hodnotu do @Rt a generuje chybu.

70 2011-08-24T20:39:02+00:00 3
 hofnarwillie
hofnarwillie
Edited question 10 september 2014 в 4:41
Programovanie
sql
sql-server
stored-procedures
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Aaron Bertrand
Aaron Bertrand
24 august 2011 в 9:01
2011-08-24T21:01:41+00:00
Viac na
Zdroj
Upraviť
#13245471

Nemôžete spojiť int s reťazcom. Namiesto:

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

Potrebujete:

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

Na ilustráciu toho, čo sa tu deje. Povedzme, že @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;

Aby som z toho vytvoril reťazec (aj keď to nakoniec bude číslo), musím ho previesť. Ale ako vidíte, pri vykonávaní sa s číslom stále zaobchádza ako s číslom. Odpoveď je 25, však?

Vo vašom prípade naozaj nemusíte znova deklarovať @Rt atď. vnútri reťazca @sql, stačí povedať:

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

Hoci by bolo lepšie mať správnu parametrizáciu, napr.

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

EXEC sp_executesql @sql,
  N'@RowFrom INT, @RowTo INT',
  @RowFrom, @RowTo;
Aaron Bertrand
Aaron Bertrand
Edited answer 6 jún 2013 в 12:54
62
0
Artificial intelligence to parse product page
productapi.dev
 htm11h
htm11h
1 apríl 2015 в 7:13
2015-04-01T19:13:46+00:00
Viac na
Zdroj
Upraviť
#13245472

Len pre vašu informáciu, viem, že je to starý príspevok, ale v závislosti od nastavení databázy COLLATION môžete dostať túto chybu pri príkaze, ako je tento,

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

ak napríklad prepisujete S v

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

ospravedlňujeme sa za to, že sme tu už uverejnili odpovede, ale toto je skutočný prípad hlásenej chyby.

Všimnite si tiež, že chyba nezobrazí veľké S v správe, nie som si istý prečo, ale myslím si, že je to preto, že

Set @sql =

je naľavo od znamienka rovnosti.

5
0
Artificial intelligence to parse product page
productapi.dev
Hans  M Ohio
Hans M Ohio
9 jún 2016 в 11:20
2016-06-09T11:20:14+00:00
Viac na
Zdroj
Upraviť
#13245473

Tento problém spôsobuje aj citlivosť na veľké a malé písmená.

@MyVariable a @myvariable sú v SQL Server Man rovnaké premenné. Studio a budú fungovať. Avšak tieto premenné budú mať za následok "Must declare the scalar variable "@MyVariable" vo Visual Studiu (C#) kvôli rozdielom v citlivosti veľkých a malých písmen.

0
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Анна Литвиненко
Registered pred dňom
2
Inessa bu
Registered pred mesiacom
3
Denis Babushkin
Registered pred mesiacom
4
asakuno asakuno
Registered pred mesiacom
5
aldo salerno
Registered pred mesiacom
Artificial intelligence to parse product page
productapi.dev
DE
EL
ES
FR
ID
IT
JA
LT
NL
NO
PT
RU
SK
TR
ZH
© kzen.dev 2023
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora