2016-08-18 2 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 

Ошибка брошенную это:

Msg 214, Level 16, Состояние 3, Процедура sp_executesql, Строка 3 Процедура ожидает параметр '@params' типа 'ntext/nchar/nvarchar'.

Я рассматривал похожие вопросы/ответы, но не мог решить мою проблему. Вся помощь очень ценится.

+1

Вы должны учитывать не используя префикс sp_ (или даже лучше без префикса в все). Это может вызвать проблемы. http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

ответ

5

Проблема опечатка в вашем коде. Обратите внимание, что ваш N находится в вашей строке, а не перед ней.
N до того, как строка идентифицирует, что следующий текст будет в юникоде, ваша ошибка на самом деле говорит о том, что ваша процедура ожидает параметр 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

Хе-хе, честно говоря, я отвечу и удалю свой комментарий :) – 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' 
Смежные вопросы