2016-08-18 59 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' 
相關問題