我對程序一無所知,但我必須創建一個,所以我嘗試了一個。但現在我得到錯誤 - 請幫助。在存儲過程中獲取轉換失敗錯誤
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。
我在做什麼錯?請糾正我。
你的動態SQL字符串錯過件之間的間隙。例如,別名'dsp'後面沒有空格,這將是一個'dspLEFT JOIN'字符串,這是一個錯誤。添加空格。順便說一句,MSSQL允許多行字符串。 –
城市變量沒有引號。我建議回到靜態SQL並寫出你的條件,因爲他們必須是。 '和(@area =''或dam.area = @area)'。如果你仍然想通過動態sql來做這件事,在執行它之前先放一個'print @ sql'。 –
'... OFFSET'+ @ offset + ...'你的一邊有一個巨大的字符串。另一方面是一個整數。你正試圖把它們「加」在一起。 'int'具有比任何字符串類型更高的優先級,因此它試圖將字符串轉換爲整數。您應該手動投射整數,但也可能有@Ivan已經指出的其他問題。 –