sql >> Database teknologi >  >> RDS >> Sqlserver

Skal erklære den skalære variabel

Du kan ikke sammenkæde en int til en streng. I stedet for:

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

Du skal bruge:

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

For at hjælpe med at illustrere, hvad der sker her. Lad os sige @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;

For at bygge det ind i en streng (selvom det i sidste ende bliver et tal), skal jeg konvertere det. Men som du kan se, behandles nummeret stadig som et tal, når det udføres. Svaret er 25, ikke?

I dit tilfælde kan du bruge korrekt parameterisering i stedet for at bruge sammenkædning, som, hvis du får den vane, vil udsætte dig selv for SQL-injektion på et tidspunkt (se dette og dette:

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

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


  1. PostgreSQL:Giv alle tilladelser til en bruger på en PostgreSQL-database

  2. Sådan migreres WHMCS-databasen til MariaDB Galera Cluster

  3. Sådan bruger du Sum, Avg og Count i Select Statement - SQL Server / TSQL Tutorial Del 128

  4. Tips til levering af MySQL-databaseydelse - Anden del