存储过程中删除表项的动态sql语句执行时发生语法异常 请高人帮忙解决

存储过程中删除表项的动态sql语句执行时发生语法错误 请高人帮忙解决

USE [Steel_DefecData]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE procedure [dbo].[ODQ_Operate_t]
@strDefectRoiTableName  varchar(30)
@strSteelNo varchar(30),
@iSurfaceType tinyint,
@iRoiNo  smallint
as       --在名为strDefectRoiTableName的表中删除符合条件的记录
begin
set nocount on
declare @sql nvarchar(300)
set @sql = N'delete '+@strDefectRoiTableName+'
where strSteelNo = '+@strSteelNo+'
and iSurfaceType = '+@strSurfaceType+'
and iRoiNo = '+@strRoiNo+''
exec sp_executesql @sql 
end


创建存储过程  在执行exec sp_executesql @sql 语句时提示有语法错误   本人菜鸟 找了好久不知道错误在哪  请高人指教
------解决方案--------------------
本帖最后由 DBA_Huangzj 于 2014-09-03 17:38:22 编辑

CREATE procedure [dbo].[ODQ_Operate_t]
@strDefectRoiTableName  varchar(30),--少了个逗号
@strSteelNo varchar(30),
@iSurfaceType tinyint,
@iRoiNo  smallint

as       --在名为strDefectRoiTableName的表中删除符合条件的记录
begin
set nocount on
declare @sql nvarchar(300)
set @sql = N'delete '+@strDefectRoiTableName+'
where strSteelNo = '+@strSteelNo+'
and iSurfaceType = '+@strSurfaceType+'--定义与参数名不一致
and iRoiNo = '+@strRoiNo+''--定义与参数名不一致
exec sp_executesql @sql 
end
------解决方案--------------------

CREATE PROCEDURE [dbo].[ODQ_Operate_t]
    @strDefectRoiTableName VARCHAR(30) ,
    @strSteelNo VARCHAR(30) ,
    @iSurfaceType TINYINT ,
    @iRoiNo SMALLINT
AS --在名为strDefectRoiTableName的表中删除符合条件的记录
    BEGIN
        SET nocount ON
        DECLARE @sql NVARCHAR(300)
        SET @sql = N'delete ' + @strDefectRoiTableName + '
where strSteelNo = ''' + @strSteelNo + '''
and iSurfaceType = ' + @iSurfaceType + '
and iRoiNo = ' + @iRoiNo + ''
        EXEC ( @sql )
    END

------解决方案--------------------
引用:
Quote: 引用:


CREATE procedure [dbo].[ODQ_Operate_t]
@strDefectRoiTableName  varchar(30),--少了个逗号
@strSteelNo varchar(30),
@iSurfaceType tinyint,
@iRoiNo  smallint

as       --在名为strDefectRoiTableName的表中删除符合条件的记录
begin
set nocount on
declare @sql nvarchar(300)
set @sql = N'delete '+@strDefectRoiTableName+'
where strSteelNo = '+@strSteelNo+'
and iSurfaceType = '+@strSurfaceType+'--定义与参数名不一致
and iRoiNo = '+@strRoiNo+''--定义与参数名不一致
exec sp_executesql @sql 
end



不好意思 这几个错误是刚才粘帖的时候自己忘了改了。 修改后的还是不能执行


最后的 exec sp_executesql @sql 修改为 exec(@sql) 试试行不行
------解决方案--------------------
  exec sp_executesql @sql 去掉sp_executesql