Почему хранимые в системе проки терпят неудачу с включенным владельцем? - PullRequest
2 голосов
/ 14 сентября 2009

В SQL Server работает следующее:

sp_help MyProc
sp_depends MyTable

Но если вы включите владельца, произойдет сбой с синтаксической ошибкой:

sp_help dbo.MyProc
sp_depends dbo.MyTable

Это заставляет вас помещать параметр в кавычки, чтобы он работал. Тем не менее, я мог бы сделать следующее без проблем:

exec dbo.MyProc

Почему несоответствие? Есть ли причина?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

SQL Server позволяет опустить одинарные кавычки для параметров строки из одного слова:

Это выдаст test:

CREATE PROCEDURE prc_test (@objname NVARCHAR(255))
AS
BEGIN
        SELECT  @objname
END

prc_test test

, однако это не удастся:

prc_Test Cannot_insert_a_dot.here

Здесь test - это краткая форма 'test' (обратите внимание на одинарные кавычки).

SP_HELP - это хранимая процедура, которая ожидает параметр VARCHAR, тогда как EXECUTE ожидает идентификатор объекта (частью базы данных которого является допустимая часть)

exec dbo.MyProc

Всегда заключайте свои строковые константы в одинарные кавычки, и может быть хорошей идеей заключать имена объектов в скобки:

EXEC [dbo].[myproc]
1 голос
/ 14 сентября 2009

Заполнение ответа Quassnoi .

SP_Help - это SP в главной БД, который принимает аргумент NVarchar для имени SP. Если вы используете его последовательно, вы должны позвонить

sp_help 'MyProc'

И с этим же условием

sp_help 'dbo.MyProc' 

отлично работает.

Дело в том, что при вызове sp_help MyProc SQL Server добавляет для вас одинарные кавычки, но это не работает при использовании точки в имени SP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...