2012-02-02 152 views
0

我写了一个SQL Server查询:SQL Server查询语法错误

declare @TaxYear VARCHAR(50) 
set @TaxYear='13' 
declare @BBL VARCHAR(50) 
set @BBL='' 
declare @Appartment VARCHAR(50) 
set @Appartment='' 
declare @ResidenceTypeDescription VARCHAR(200) 
set @ResidenceTypeDescription='' 
declare @SN1 VARCHAR(20) 
set @SN1='' 
declare @SN2 VARCHAR(20) 
set @SN2='' 
declare @Status VARCHAR(100) 
set @Status='Unassigned' 
declare @RowIndex INT 
set @RowIndex=1 
declare @MaxRows INT 
set @MaxRows=25 
declare @SortExpression varchar(50) 
set @SortExpression='bbl desc' 
declare @sql varchar(max) 
DECLARE @StartRow INT 
DECLARE @EndRow INT 
    SET @StartRow = @RowIndex 
    SET @EndRow = (@StartRow + @MaxRows) - 1 
      set @sql= 'SELECT * 
      FROM (SELECT * , 
           ROW_NUMBER() OVER (ORDER BY '[email protected] +') AS ROW 
         FROM  vwApplicationList 
         WHERE  TaxYear = '[email protected]+' 
           AND Status = '[email protected]+' 
           AND REPLACE(BBL, ''--'', '''') LIKE ''%' + @BBL 
           + '%'' 
           AND COALESCE(UnitOrAppartmentNumber, '''') LIKE ''%' 
           + @Appartment + '%'' 
           AND COALESCE(ResidenceTypeDescription, '''') LIKE ''%' 
           + @ResidenceTypeDescription + '%'' 
           AND (COALESCE(SN1, '''') LIKE ''%' + @SN1 + '%'' 
             OR COALESCE(SN2, '''') LIKE ''%' + @SN2 
             + '%'' 
            ) 
        ) AS NumberedUsers 
      WHERE ROW BETWEEN '[email protected]+' AND '[email protected] 
exec (@sql) 

当我运行此查询我得到一个错误:

enter image description here

+2

请格式化你的问题的代码 - 这是很难阅读它 – chopikadze 2012-02-02 07:18:15

回答

2

的问题是在您的查询的末尾,你试图串连整数值,你必须将其转换为varchar ...

declare @TaxYear VARCHAR(50) 
set @TaxYear='13' 
declare @BBL VARCHAR(50) 
set @BBL='' 
declare @Appartment VARCHAR(50) 
set @Appartment='' 
declare @ResidenceTypeDescription VARCHAR(200) 
set @ResidenceTypeDescription='' 
declare @SN1 VARCHAR(20) 
set @SN1='' 
declare @SN2 VARCHAR(20) 
set @SN2='' 
declare @Status VARCHAR(100) 
set @Status='Unassigned' 
declare @RowIndex INT 
set @RowIndex=1 
declare @MaxRows INT 
set @MaxRows=25 
declare @SortExpression varchar(50) 
set @SortExpression='bbl desc' 
declare @sql varchar(max) 
DECLARE @StartRow INT 
DECLARE @EndRow INT 
    SET @StartRow = @RowIndex 
    SET @EndRow = (@StartRow + @MaxRows) - 1 
      set @sql=    
      'SELECT * 
      FROM (SELECT * , 
           ROW_NUMBER() OVER (ORDER BY '[email protected] +') AS ROW 
         FROM  vwApplicationList 
         WHERE  TaxYear = '[email protected]+' 
           AND Status = '[email protected]+' 
           AND REPLACE(BBL, ''--'', '''') LIKE ''%' + @BBL 
           + '%'' 
           AND COALESCE(UnitOrAppartmentNumber, '''') LIKE ''%' 
           + @Appartment + '%'' 
           AND COALESCE(ResidenceTypeDescription, '''') LIKE ''%' 
           + @ResidenceTypeDescription + '%'' 
           AND (COALESCE(SN1, '''') LIKE ''%' + @SN1 + '%'' 
             OR COALESCE(SN2, '''') LIKE ''%' + @SN2 
             + '%'' 
            ) 
        ) AS NumberedUsers 
      WHERE ROW BETWEEN '+ Convert(varchar,@StartRow)+' AND '+Convert(varchar,@EndRow) 

exec (@sql) 
0

更换@StartRowCAST(@StartRow AS VARCHAR(50))@EndRowwithCAST(@EndRow AS VARCHAR(50))

0

使用:convert(int,@StartRow) a第二convert(int,@EndRow)