过程需要'ntext/nchar/nvarchar'类型的参数'@params'

Jam*_*sBB 7 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
Run Code Online (Sandbox Code Playgroud)

抛出的错误是这样的:

消息214,级别16,状态3,过程sp_executesql,行3过程期望参数'@params'类型为'ntext/nchar/nvarchar'.

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

Eva*_*kas 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;
Run Code Online (Sandbox Code Playgroud)