2016-08-18 61 views
1

的,这是我的存储过程:过程预计参数 '@params' 类型 '的ntext/NCHAR/nvarchar的'

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 [email protected]'; 

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行过程 需要类型为'ntext/nchar/nvarchar'的参数'@params'。

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

+1

应考虑不使用以sp_前缀(甚至更好没有前缀的所有)。它可能会导致问题。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

回答

5

问题是您的代码中的拼写错误。注意你的N在你的字符串中,而不是在它之前。
N在字符串标识下面的文本将会是unicode之前,你的错误实际上告诉你的程序需要unicode参数并且取而代之的是VARCHAR

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

现在,这是来自原始帖子的大量编辑! – sgeddes

+0

@sgeddes我实际上删除了它,然后发现了实际的错误,未删除和编辑: –

+0

呵呵,够公平的,我会upvote并删除我的评论:) – sgeddes

0

拼错@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' 
相关问题