2013-04-10 5 views
1

Так что я весь день борюсь с этой проблемой. Сначала я думал, что это должно быть с моим кодом вызова, хотя все выглядело хорошо. Вызывающий код является просто стандартным вызовом из файла VB codebehind и в любом случае не связан с привязкой данных. Я упоминаю об этом, так как я видел, как многие другие люди с этой проблемой имели это из-за DataGrids и т. Д.Процедура или функция XXX содержит слишком много аргументов

Затем я отправился в базу данных и вручную выполнил эту процедуру и дал ту же ошибку в SQL Sevrer Manager. Я попытался удалить процедуру и воссоздать ее даже до момента переписывания ее с нуля, и это все еще происходит. Я также попытался удалить значение NULL по умолчанию из параметра @Password, но все равно никаких изменений.

Я бегу SQL Server 2008 R2

Вот код процедуры:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[sp_AddUser] 
    @Username  varchar(50), 
    @Fullname  varchar(50), 
    @Password  varchar(50) = NULL, 
    @Datecreated DateTime, 
    @RoleID   int, 
    @ResetPwd  bit, 
    @Email   varchar(50), 
    @locked   bit, 
    @Sign   varchar(max), 
    @Sysuser  bit 
AS 
BEGIN 
    INSERT INTO users ( 
     user_name, 
     full_name, 
     password, 
     datetime_created, 
     role_id, 
     password_reset, 
     email_address, 
     locked, 
     email_signature, 
     asrsys_user) 
    VALUES (
     @Username, 
     @Fullname, 
     @Password, 
     @Datecreated, 
     @RoleID, 
     @ResetPwd, 
     @Email, 
     @locked, 
     @Sign, 
     @Sysuser) 
END 
+4

Где ваш код для ручного выполнения этой процедуры, который вы сказали, также дает ту же ошибку? –

+0

Вы можете вставить схему пользователей? – christiandev

+0

@Damien_The_Unbeliever Извините, что я имел в виду использование 'Execute Stored Procedure' из контекстного меню в Studio SQL Server Management Studio – Zammalad

ответ

5

Вы должны избегать использования sp_ в качестве префикса для хранимых процедур - это зарезервировано для использования Microsoft - и вызывает странные правила поиска (master выполняется поиск до текущей базы данных), что означало бы, что MS могла ввести SP с тем же именем (например, с помощью пакета обновления), MS SP «выиграл».

Но в этом случае у Microsoft уже есть «выиграно» - у них есть хранимая процедура, называемая sp_adduser, и это тот, который вызывается. Переименуйте сохраненный proc.

+0

Yup после вашего комментария Я решил попробовать его на случай, если он может быть связан и это, как вы говорите, проблема. 3 часа по проблеме именования. Урок выучен. Спасибо за примечание, касающееся sp_. Что-то, чего я раньше не встречал. – Zammalad

+1

@ Zammalad: Я бы сказал, что использование одного и того же префикса во всех ваших хранимых процедурах - плохая идея. Это совершенно необязательно, поскольку они уже организованы в области «хранимых процедур» студии управления, и все, что вы действительно делаете, затрудняет ее быстро найти в списке. Для такого типа вещей я бы назвал его «UserAdd» таким образом, что procs сгруппированы по таблицам, на которых они работают. – NotMe

+2

@ Zammalad - как указывает Крис, нет необходимости использовать префиксы и тому подобное в SQL Server. Они не только организованы отдельно в визуальных инструментах, но синтаксис SQL делает тип объекта однозначным в любой конкретной ситуации (за исключением между таблицами и представлениями, которые не следует различать в любом случае). Например. если вы видите 'exec X @ abc, @ def', можете ли вы угадать тип объекта, который' X' не ищет его? –

Смежные вопросы