Фон:
SQL Server Management Studio
позволяет определять собственные ярлыки запросов (Tools > Options > Environment > Keyboard > Query Shortcuts
):
Изображение из: http://social.technet.microsoft.com/wiki/contents/articles/3178.how-to-create-query-shortcuts-in-sql-server-management-studio.aspx
my_schema.my_table
-- highlight it
-- press CTRL + 3 and you will get the number of rows in table
Он работает нормально, но он объединяет запрос в базовой форме (насколько я знаю только в конце). Запрос:
SELECT COUNT(*) FROM my_schema.my_table;
Попытка # 1
Теперь я хочу написать что-то более конкретное, например, имя таблицы pass/concatenate для следующего запроса (это просто пример):
SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID(...)
Итак, когда я пишу в ярлыках запросов:
SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID('
Мне нужно использовать:
my_schema.my_table')
-- highlight it
-- press CTRL + 3
Дополнительный ')
очень уродлив и неудобен.
Попытка # 2:
Второе испытание - использовать Dynamic-SQL:
EXEC dbo.sp_executesql
N'SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID(@obj_name)'
,N'@obj_name SYSNAME'
,
Выполнение:
my_table
-- highligt it
-- and run
Работает также при цитировании имени таблицы [my_table]
. Пока объект находится в dbo
(по умолчанию) схеме.
Проблема в том, что когда таблица имеет схему, она не будет работать:
EXEC dbo.sp_executesql
N'SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID(@obj_name)'
,N'@obj_name SYSNAME'
,
Выполнение:
my_schema.my_table
[my_schema].[my_table]
Неправильный синтаксис около '.'.
Конечно, я мог бы написать:
EXEC dbo.sp_executesql
N'SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID(@obj_name)'
,N'@obj_name SYSNAME'
,'
и назовите его как:
[my_schema].[my_table]'
Но дополнительный '
также является уродливым и неудобным.
Вопросы:
-
Можно ли передать значение, чтобы запросить окно ярлыков, посередине (позиционное или даже более одного значения)?
-
Можно ли передать do stored_procedure/dynamic-sql квалифицированный идентификатор, не разбивая его с помощью
'
,"
?
Примечание:
- Я не ищу плагины для SSMS
- Я не хочу обертывать object_name как
"my_schema.my_table"
- Я знаю, что есть
sp_helptext
(это просто пример, я ищу метод) - Первый вопрос - это конкретный инструмент (я его знаю), но второй -
SQL Server
.
EDIT:
Чтобы прояснить передаваемый идентификатор SP без '
или "
:
CREATE TABLE dbo.my_table(col INT);
GO
CREATE PROCEDURE dbo.my_proc
@a SYSNAME
AS
SELECT *
FROM sys.columns
WHERE [object_id] = OBJECT_ID(@a)
GO
EXEC dbo.my_proc
@a = my_table;
EXEC dbo.my_proc
@a = dbo.my_table;
-- Incorrect syntax near '.'.