存储过程为:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[usp_FurtherEduTrainPlan_select] 
(
   @type int,
   @query NVARCHAR(MAX)
)
AS  
BEGIN
declare @t int
set @t=@type
declare @sql NVARCHAR(MAX)
DECLARE @querystring NVARCHAR(MAX)
SET @querystring=@query
if @t=1
begin
 set @sql=N' where FurtherEduTrainPlan.PlanName= '+QUOTENAME(@query,'''')
end
else if @t=2
begin
set @sql=N' where FurtherEduTrainPlan.begin= '+convert(datetime,QUOTENAME(@query,''''))
end
else if @t=3
begin
set @sql=N' where FurtherEduTrainPlan.end= '+convert(datetime,QUOTENAME(@query,''''))
end
else if @t=4
begin
set @sql=N' where FurtherEduTrainPlan.PlanNmumber= '+convert(int,QUOTENAME(@query,''''))
end
else if @t=5
begin
set @sql=N' where FurtherEduTrainPlan.eduIngCount= '+convert(int,QUOTENAME(@query,''''))
endelse if @t=6
begin
set @sql=N' where FurtherEduTrainPlan.eduEndCount= '+convert(int,QUOTENAME(@query,''''))
endelse
begin
set @sql=N' where FurtherEduTrainPlan.notEduEndCount= '+convert(int,QUOTENAME(@query,''''))
endset @sql=N' select FurtherEduTrainPlan.PlanName,FurtherEduTrainPlan.begin,
       FurtherEduTrainPlan.end,FurtherEduTrainPlan.PlanNmumber,
       FurtherEduTrainPlan.eduIngCount,FurtherEduTrainPlan.eduEndCount,
       FurtherEduTrainPlan.notEduEndCount from FurtherEduTrainPlan '+@sql
EXEC sp_executesql @sql
END
执行存储过程:USE [ZJ]
GODECLARE @return_value intEXEC @return_value = [dbo].[usp_FurtherEduTrainPlan_select]
@type = 1,
@query = N'基础教育'SELECT 'Return Value' = @return_valueGO结果报错:消息 203,级别 16,状态 2,过程 usp_FurtherEduTrainPlan_select,第 53 行
名称 ' select FurtherEduTrainPlan.PlanName,FurtherEduTrainPlan.begin,
       FurtherEduTrainPlan.end,FurtherEduTrainPlan.PlanNmumber,
       FurtherEduTrainPlan.eduIngCount,FurtherEduTrainPlan.eduEndCount,
       FurtherEduTrainPlan.notEduEndCount from FurtherEduTrainPlan  where FurtherEduTrainPlan.PlanName='基础教育'' 不是有效的标识符。

解决方案 »

  1.   

    set @sql=N' select FurtherEduTrainPlan.PlanName,FurtherEduTrainPlan.begin,
      FurtherEduTrainPlan.end,FurtherEduTrainPlan.PlanNmumber,
      FurtherEduTrainPlan.eduIngCount,FurtherEduTrainPlan.eduEndCount,
      FurtherEduTrainPlan.notEduEndCount from FurtherEduTrainPlan '+@sql
    EXEC sp_executesql @sql
    END
    改为 exec(@sql)set @sql=N' select FurtherEduTrainPlan.PlanName,FurtherEduTrainPlan.begin,
      FurtherEduTrainPlan.end,FurtherEduTrainPlan.PlanNmumber,
      FurtherEduTrainPlan.eduIngCount,FurtherEduTrainPlan.eduEndCount,
      FurtherEduTrainPlan.notEduEndCount from FurtherEduTrainPlan '+@sql
    exec(@sql)
    END
      

  2.   

    他们两个效果都差不多,改成exec(@sql)
    还是有问题
      

  3.   


    ALTER PROCEDURE [dbo].[usp_FurtherEduTrainPlan_select]  
    (
      @type int,
      @query NVARCHAR(MAX)
    )
    AS   
    BEGIN
    declare @t int
    set @t=@type
    declare @sql NVARCHAR(MAX)
    DECLARE @querystring NVARCHAR(MAX)
    SET @querystring=@query
    if @t=1
    begin
     set @sql=N' where FurtherEduTrainPlan.PlanName= '''+QUOTENAME(@query,'''')+''''
    end
    else if @t=2
    begin
    set @sql=N' where FurtherEduTrainPlan.begin= '''+convert(datetime,QUOTENAME(@query,''''))+''''
    end
    else if @t=3
    begin
    set @sql=N' where FurtherEduTrainPlan.end= '''+convert(datetime,QUOTENAME(@query,''''))+''''
    end
    else if @t=4
    begin
    set @sql=N' where FurtherEduTrainPlan.PlanNmumber= '+ltrim(convert(int,QUOTENAME(@query,'''')))
    end
    else if @t=5
    begin
    set @sql=N' where FurtherEduTrainPlan.eduIngCount= '+ltrim(convert(int,QUOTENAME(@query,'''')))
    endelse if @t=6
    begin
    set @sql=N' where FurtherEduTrainPlan.eduEndCount= '+ltrim(convert(int,QUOTENAME(@query,'''')))
    endelse
    begin
    set @sql=N' where FurtherEduTrainPlan.notEduEndCount= '+ltrim(convert(int,QUOTENAME(@query,'''')))
    endset @sql=N' select FurtherEduTrainPlan.PlanName,FurtherEduTrainPlan.begin,
      FurtherEduTrainPlan.end,FurtherEduTrainPlan.PlanNmumber,
      FurtherEduTrainPlan.eduIngCount,FurtherEduTrainPlan.eduEndCount,
      FurtherEduTrainPlan.notEduEndCount from FurtherEduTrainPlan '+@sql
    EXEC(@sql)
    END