запрос ошибки в хранимой процедуре - PullRequest
1 голос
/ 20 ноября 2011

ВСЕ хранимые процедуры

USE [amozeshgah]
GO
/****** Object:  StoredProcedure [dbo].[selectmanageregistercourse] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[selectmanageregistercourse]
@iddore int,
@stateregister int,
@userid nvarchar(350)
AS
declare @str nvarchar(900)
BEGIN
SET @str= 'SELECT tblUserRegisterDore.id, tblUserRegisterDore.idcourse, tblUserRegisterDore.iddore, tblUserRegisterDore.userid, tblUserRegisterDore.coderegister, tblUserRegisterDore.fish, tblUserRegisterDore.date, tblUserRegisterDore.statefish, tblUserRegisterDore.stateregister, tbluser.name, tbldore.name AS namesubcourse, tblmozedore.name AS namecourse, tbluser.family FROM tblUserRegisterDore INNER JOIN tblmozedore ON tblUserRegisterDore.idcourse = tblmozedore.id INNER JOIN tbldore ON tblUserRegisterDore.iddore = tbldore.id AND tblmozedore.id = tbldore.idmozedore INNER JOIN tbluser ON tblUserRegisterDore.userid = tbluser.userid where  iddore='+convert(nvarchar(100),@iddore)
 if (@stateregister<>-1)
begin
set @str +=' and stateregister='+ convert(varchar(100),@stateregister)
end 
if (@userid <>'-1')
begin
set @str +=' and tblUserRegisterDore.userid='+ @userid
end
EXEC sp_executesql @str 
END

при выполнении запроса vlaue @userid в котором ошибка 'Неверное значение имени столбца @user id'

параметры, которые передаются

EXEC    @return_value = [dbo].[selectmanageregistercourse]
        @iddore = 3,
        @stateregister = 1,
        @userid = N'fdfsdf'

ошибка Сообщение 207, уровень 16, состояние 1, строка 1 Неверное имя столбца 'fdfsdf'.

почему

1 Ответ

1 голос
/ 20 ноября 2011

Здесь много проблем, и кажется, что файл, который вы показываете, не тот, который вы используете на сервере.

Вот как создать SP и не использовать динамический SQL - это будет намного быстрее и проще в использовании:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[selectmanageregistercourse]
@iddore int,
@stateregister int,
@fish nvarchar(350)
AS
BEGIN
    SELECT tblUserRegisterDore.id, tblUserRegisterDore.idcourse, tblUserRegisterDore.iddore, 
           tblUserRegisterDore.userid, tblUserRegisterDore.coderegister, tblUserRegisterDore.fish, tblUserRegisterDore.date, 
           tblUserRegisterDore.statefish, tblUserRegisterDore.stateregister, tbluser.name, tbldore.name AS namesubcourse, 
           tblmozedore.name AS namecourse, tbluser.family 
    FROM tblUserRegisterDore 
    INNER JOIN tblmozedore ON tblUserRegisterDore.idcourse = tblmozedore.id 
    INNER JOIN tbldore ON tblUserRegisterDore.iddore = tbldore.id AND tblmozedore.id = tbldore.idmozedore 
    INNER JOIN tbluser ON tblUserRegisterDore.userid = tbluser.userid 
    WHERE iddore=@iddore
     AND ((@stateregister =-1) OR (stateregister=@stateregister))
     AND ((@fish ='-1') OR (tblUserRegisterDore.fish=@fish))
END

Предыдущий комментарий больше не применяется, если вы используете выше

Однако здесь есть одна проблема. У вас есть varchar, и вы не используете кавычки в динамическом sql, который вы создаете.

set @str +=' and tblUserRegisterDore.fish='+ @fish

должно быть

set @str +=' and tblUserRegisterDore.fish='''+ @fish + ''''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...