2012-02-02 147 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)