日期:2014-05-18  浏览次数:20566 次

EXECUTE sp_executesql 出错
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[sp_DLookup] ')   and   OBJECTPROPERTY(id,   N 'IsProcedure ')   =   1)
drop   procedure   [dbo].[sp_DLookup]
GO

SET   ANSI_NULLS   ON
GO
SET   QUOTED_IDENTIFIER   ON
GO

CREATE   PROCEDURE   [dbo].[sp_DLookup]
@psField   varchar(100),
@psTable   varchar(100),
@psCriteria   varchar(100)
AS
declare   @strSql   varchar(1000)

BEGIN
        set   @strSql   =   N 'Select   top   1   '+@psField+N '   as   Result   From   '+@psTable
        If   (@psCriteria   !=   ' ')  
              set   @strSql   =   @strSql   +   N '   Where   '+@psCriteria


EXECUTE   sp_executesql   @strSql,   N '@psField   varchar(100)   output ',@psField   output


END
GO

错误提示:Msg   214,   Level   16,   State   2,   Procedure   sp_executesql,   Line   1
Procedure   expects   parameter   '@statement '   of   type   'ntext/nchar/nvarchar '.


------解决方案--------------------
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[sp_DLookup] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[sp_DLookup]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[sp_DLookup]
@psField varchar(100),
@psTable varchar(100),
@psCriteria varchar(100)
AS
declare @strSql nvarchar(1000) --数据类型要修改为unicode类型

BEGIN
set @strSql = N 'Select top 1 '+@psField+N ' as Result From '+@psTable
If (@psCriteria != ' ')
set @strSql = @strSql + N ' Where '+@psCriteria


EXECUTE sp_executesql @strSql, N '@psField varchar(100) output ',@psField output


END
GO