我对程序一无所知,但我必须创建一个,所以我尝试了一个。但现在我得到错误 - 请帮助。在存储过程中获取转换失败错误
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已经指出的其他问题。 –