程序需要参数' @ params'类型&n; ntext / nchar / nvarchar'

时间:2016-08-18 17:40:26

标签: sql sql-server

这是我的存储过程:

ALTER PROCEDURE [dbo].[sp_Update_Projecttijden]
   @tabelnaam                    NVARCHAR(30)                , 
   @starttijd                  DATETIME,
   @eindtijd                  DATETIME,       
   @tijd                    FLOAT,
   @startid                 INT,
   @eindid          INT        
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
-- DECLARE @DATEVARCHAR NVARCHAR(4000);
DECLARE @SQLCommand NVARCHAR(MAX) = N'
    UPDATE ' + QUOTENAME(@tabelnaam) + N'
    SET Start = @starttijd
      , Einde = @eindtijd
      , Tijd = @tijd
      , StartID = @startid
      , EindID = @eindid

    WHERE StartID = @startid AND EindID=@eindid';

EXECUTE dbo.sp_executesql @sqlCommand,
  ' N @starttijd DATETIME, @eindtijd DATETIME, @tijd FLOAT, @startid INT, @eindid INT'


  , @starttijd
  , @eindtijd
  , @tijd
  , @startid
  , @eindid;

END

抛出的错误是:

  

消息214,级别16,状态3,过程sp_executesql,第3行过程   期望参数' @ params'类型&n; ntext / nchar / nvarchar'。

我一直在寻找类似的问题/答案,但无法真正解决我的问题。 非常感谢所有帮助。

2 个答案:

答案 0 :(得分:8)

问题是代码中的拼写错误。请注意,您的N在您的字符串中,而不是在它之前 N在string之前标识后续文本将是unicode时,您的错误实际上告诉您的过程需要unicode参数并改为VARCHAR

EXECUTE sys.sp_executesql @sqlCommand
    , N'@starttijd DATETIME, @eindtijd DATETIME, @tijd FLOAT, @startid INT, @eindid INT'
    , @starttijd
    , @eindtijd
    , @tijd
    , @startid
    , @eindid;

答案 1 :(得分:1)

您错误拼写了@params参数:

你应该替换:

EXECUTE dbo.sp_executesql @sqlCommand,
  ' N @starttijd DATETIME, @eindtijd DATETIME, @tijd FLOAT, @startid INT, @eindid INT'

EXECUTE dbo.sp_executesql @sqlCommand,
  N'@starttijd DATETIME, @eindtijd DATETIME, @tijd FLOAT, @startid INT, @eindid INT'