2013-11-19 2 views
0

я создал следующие хранимые процедуры в SQL Server,Ошибка при прохождении где положение в качестве параметра хранимой процедуры

create procedure sp_test 
    @columns nvarchar(max), 
    @tablename nvarchar(max), 
    @whereClause nvarchar(max) 
as 
    DECLARE @sql AS NVARCHAR(MAX) 
    SET @sql = 'SELECT ' + @columns + ' FROM ' + @tablename + @whereClause; 

    EXEC sp_executesql @sql 

Я пытаюсь назвать это как этот

exec sp_test 'title,name','person','where name = ''john''' 

И я получаю сообщение об ошибке, как это,

Msg 102, Level 15, State 1, Line 1
Неправильный синтаксис NEA r '='.

+0

Side Примечание: вы должны ** ** не использовать 'sp_' префикс для хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –

+0

спасибо @ marc_s плохо меняют. – Rajneesh

ответ

1

У вас есть дополнительный апостроф, почему бы не использовать двойные кавычки, например:

exec sp_test 'title,name','person'," where name = 'john'" 

Добавить дополнительное пространство также здесь:

SET @sql = 'SELECT ' + @columns + ' FROM ' + @tablename+ ' ' + @whereClause; 
1

Подсказка: Это потому, что

SELECT title,name FROM personwhere name = 'john' 

является недействительный SQL.

Причина должна быть очевидной сейчас и остается в качестве упражнения для читателя ...

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