Intellisense и контекстная помощь для хранимых процедур sys - ошибки или дизайн? - PullRequest
2 голосов

SQL Server 2008 R2 Dev

Выполнение в SSMS:
1)

use AdventureWorksDW;
GO;
sp_cdc_enable_table
'dbo',' FactInternetSales ',
@ role_name = NULL,
@ support_net_changes = 0

успешно.

Почему выполняется
2)

sp_cdc_enable_table 'dbo', 'FactInternetSales' -, @ role_name = NULL, @ support_net_changes = 0

выдает ошибку:

Msg 201, уровень 16, состояние 4, процедура sp_cdc_enable_table, строка 0 Процедура или функция sp_cdc_enable_table ожидает параметр '@role_name', который не был предоставлен.

в то время как Всплывающее окно Intellisense при включенном курсоре мыши в SSMS показывает:

хранимая процедура AdventureWorksDW.sys.sp_cdc_enable_table
@source_schema sysname,
@source_name sysname,
@ capture_instance sysname = null,
@supports_net_changes bit = null ,
@role_name sysname,
@index_name sysname= null,
[продолжение обрезано vgv8] alt text

Не означает ли "= null" значение по умолчанию, которое используется, если параметр не указан?
Почему не пропущено @индекс_имяROR?

Дополнительные вопросы:
Как скопировать текст описания всплывающего окна в буфер (для дальнейшего вставки)?
Не является ли "@role_name bit = null" во всплывающем окне ошибкой (и должно было быть"@role_name bit = 0" вместо этого)?

Обновление:
Я исправил опечатку в сообщении.
Действительно я выполнил

sp_cdc_enable_table 'dbo', 'FactInternetSales' -, @ role_name = NULL, @support_net_changes = 0

т.е. оба варианта являются выполнением одного и того же скрипта
1) без комментариев
2) с комментариями

Update3:
ОК, изначально я неправильно набрал текст всплывающего окна, который я сейчас исправил.Итак, вопрос об ошибке снят, спасибо.

Из контекста моего успешного выполнения 1) вы должны заметить, что мои вопросы касаются всплывающих окон (но не того, как добиться успеха):

  • , является ли всплывающее окно (в)правильный?
    • " @ capture_instance sysname = null, не следует ли заключать его в квадратные скобки [], показывая, что его можно пропустить?
    • " @ support_net_changes bit = null, "- не должно ли быть" = 0 "?
  • как скопировать всплывающее окно (например, для сообщения об ошибке в Microsoft Connect)?

Обратите внимание, что во всплывающем окне также есть "@capture_instance = null", который может быть полностью пропущен, но это никак не помечено.

Update4:
Я включилснимок экрана.
Ну, это довольно контекстно-зависимая справка.
Intellisense вообще не работает на sys.sp_ * и всплывающее окно не отображается, если есть синтаксическая ошибка - что бы MS ни делала вид, что добилась такой "помощи"поскольку необходимо вставить полностью правильный оператор, чтобы избежать синтаксических ошибок и иметь контекстно-зависимую «справку» ...

Update5:
Тогда, какой смысл, что параметры со значениями по умолчанию не могут быть отброшены?

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Согласно документации MSDN здесь , необходимо указать @role_name.

[@role_name =] 'role_name'

Имя роли базы данных, используемой для доступа к данным изменений. role_name является sysname и должно быть указано.Если явно установлено значение NULL, роль ограничения не используется для ограничения доступа к данным изменений.

Если роль в настоящее время существует, она используется.Если роль не существует, делается попытка создать роль базы данных с указанным именем.Имя роли обрезается пробелом справа от строки перед попыткой создать роль.Если вызывающая сторона не авторизована для создания роли в базе данных, операция хранимой процедуры завершится неудачно.

0 голосов
/ 11 октября 2010

Вам не хватает '

sp_cdc_enable_table 'dbo', FactInternetSales' 
                          ^ here

Измените его на:

sp_cdc_enable_table 'dbo', 'FactInternetSales' 

И это должно исправить вашу проблему.

...