2016-03-11 34 views
0

我對程序一無所知,但我必須創建一個,所以我嘗試了一個。但現在我得到錯誤 - 請幫助。在存儲過程中獲取轉換失敗錯誤

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[Get_List_Docter_Detail_A] 
    @special varchar(MAX), 
    @city varchar(MAX), 
    @offset int, 
    @pageSet int, 
    @area varchar(MAX) 
AS 
Begin 
    declare @sql nvarchar(MAX); 

    set @sql = 'SELECT'+ 
     '(SELECT Stuff('+ 
      '(SELECT N"," + sp.specialization FROM DSpecialization_Master dsp'+ 
      'LEFT JOIN Specialization_Master sp on sp.id = dsp.specialization'+ 
      'WHERE dsp.profileid = pm.id and (dsp.specialization = (select id from Specialization_master where specialization='[email protected]+'))'+ 
      'FOR XML PATH(""),TYPE)'+ 
      '.value("text()[1]","nvarchar(max)"),1,1,N"")) as drspec,'+ 
    'pm.id as profileid,'+ 
    'pm.loginid as loginid,'+ 
    'dam.clinicname,'+ 
    'dam.area,'+ 
    'dam.address,'+ 
    'dam.pincode,'+ 
    'dam.id as addressid,'+ 
    'dam.feecharge as feecharge,'+ 
    'pm.fname,'+ 
    'pm.lname,'+ 
    'pm.email,'+ 
    'pm.mobile,'+ 
    'pm.phone,'+ 
    'pm.gender,'+ 
    'pm.dob,'+ 
    'pm.totexp,'+ 
    'pm.imagepath,'+ 
    'pm.languages,'+ 
    'pm.statement,'+ 
    'pm.createdby,'+ 
    'convert(nvarchar, pm.createdon, 103) as createddate,'+ 
    'convert(nvarchar, pm.createdon, 108) as createdtime,'+ 
    'pm.hsbit,'+ 
    'overall_count = COUNT(*) OVER(),'+ 
    '(SELECT Stuff('+ 
     '(SELECT N"," + education FROM DEducation_Master WHERE profileid = pm.id'+ 
     'FOR XML PATH(""),TYPE)'+ 
    '.value("text()[1]","nvarchar(max)"),1,1,N"")) as dredu'+ 
    'FROM Profile_Master pm '+ 
     'LEFT JOIN DAddress_Master dam on dam.profileid = pm.id '+ 
    'WHERE '+ 
     'dam.city='[email protected]; 
     if @area!='' 
      set @sql+=' and dam.area in('[email protected]+') and'; 
     set @sql+=' pm.id IN (SELECT profileid FROM DSpecialization_Master WHERE specialization = (select id from Specialization_master where specialization='[email protected]+')) ORDER BY dam.city OFFSET '[email protected]+' ROWS FETCH NEXT '[email protected]+' ROWS ONLY'; 

EXECUTE sp_executesql @sql 
END 

我得到這個錯誤。

消息245,級別16,狀態1,過程Get_List_Docter_Detail_A,61線
轉換轉換時nvarchar的值「SELECT(選擇的東西((SELECT N 「」 + sp.specialization FROM DSpecialization_Master dspLEFT失敗JOIN Specialization_Master ()),sp.id = dsp.specializationWHERE dsp.profileid = pm.id和(dsp.specialization =(從Specialization_master中選擇id,其中specialization = Dentist))FOR XML PATH(「」),TYPE).value(「text() [1]「,」nvarchar(max)「),1,1,N」「))作爲drspec,pm.id作爲profileid,pm.loginid作爲loginid,dam.clinicname,dam.area,dam.address,dam .pincode,dam.id as addressid,dam.feecharge as feecharge,pm.fname,pm.lname,pm.email,pm.mobile,pm.phone,pm.gender,pm.dob,pm.totexp,pm.imagepath ,pm.languages,pm.statement,pm.createdby,convert(nvarchar,pm.crea tedon,103)as createddate,convert(nvarchar,pm.createdon,108)as createdtime,pm.hsbit,overall_count = COUNT(*)OVER(),(SELECT Stuff((SELECT N「,」+ education FROM DEducation_Master where profileid = pm.idFOR XML PATH(「」),TYPE).value(「text()[1]」,「nvarchar(max)」),1,1,N「」))as dreduFROM Profile_Master pm LEFT JOIN DAddress_Master dam在dam.profileid = pm.id WHILE dam.city =(suarat和dam.area在(Adajan))和'to data type int。

我在做什麼錯?請糾正我。

+0

你的動態SQL字符串錯過件之間的間隙。例如,別名'dsp'後面沒有空格,這將是一個'dspLEFT JOIN'字符串,這是一個錯誤。添加空格。順便說一句,MSSQL允許多行字符串。 –

+0

城市變量沒有引號。我建議回到靜態SQL並寫出你的條件,因爲他們必須是。 '和(@area =''或dam.area = @area)'。如果你仍然想通過動態sql來做這件事,在執行它之前先放一個'print @ sql'。 –

+1

'... OFFSET'+ @ offset + ...'你的一邊有一個巨大的字符串。另一方面是一個整數。你正試圖把它們「加」在一起。 'int'具有比任何字符串類型更高的優先級,因此它試圖將字符串轉換爲整數。您應該手動投射整數,但也可能有@Ivan已經指出的其他問題。 –

回答

0

嘗試用雙單配額來代替雙配額

替換該行

'(SELECT N"," + sp.specialization 

隨着

'(SELECT N'','' + sp.specialization