Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как передать имя таблицы в Stored Procedure?  [new]
Aviram
Member

Откуда:
Сообщений: 51
Как передать имя таблицы в Stored Procedure?
Bроде:
CREATE PROCEDURE dbo.[Sp1]

@рTable nvarchar(10)=""


AS

BEGIN()

SELECT * FROM ???@pTable

End

Зараннее Огромное спасибо за дельный ответ.
27 дек 07, 16:40    [5104391]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35398
Блог
через динамику
27 дек 07, 16:43    [5104413]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3155
exec('select * from ' + @pTable)
27 дек 07, 16:45    [5104438]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
https://www.sql.ru/faq/faq_topic.aspx?fid=104

Из топ 10 :(
27 дек 07, 16:46    [5104446]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Aviram
Member

Откуда:
Сообщений: 51
Локшин Марк
exec('select * from ' + @pTable)



CREATE PROCEDURE [dbo].[S1]
@pTable nvarchar(10)=""
AS
BEGIN

exec('select * from ' + @pTable)

END

Ругается в SQL Server Management Studio Express:
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name.
27 дек 07, 17:33    [5104684]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3155
drop procedure [dbo].[s1]
drop table t
go
create table t(a int)
insert into t(a)values(0)
go
CREATE PROCEDURE [dbo].[S1]
@pTable nvarchar(10)=''
AS
BEGIN

exec('select * from ' + @pTable)

END
go
exec s1 @pTable = 't'
У меня 2000, но не думаю, что это что-то меняет. В случае ошибке в моем примере * заменить на a.
27 дек 07, 18:22    [5104904]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Aviram
Member

Откуда:
Сообщений: 51
Локшин Марк
drop procedure [dbo].[s1]
drop table t
go
create table t(a int)
insert into t(a)values(0)
go
CREATE PROCEDURE [dbo].[S1]
@pTable nvarchar(10)=''
AS
BEGIN

exec('select * from ' + @pTable)

END
go
exec s1 @pTable = 't'
У меня 2000, но не думаю, что это что-то меняет. В случае ошибке в моем примере * заменить на a.


Только что проверил. Сработало.
Спасибо. :-)))
27 дек 07, 20:26    [5105206]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
б-с
Guest
где-то видел такой подход (for 2005й only):

create proc proc1
@tablename sysname
as
if object_id('MyTable') is not null
	drop SYNONYM MyTable
exec ('CREATE SYNONYM MyTable FOR '+@tablename)
SELECT top 1 * from MyTable
go

хотелось бы услышать о его недостатках (сам не использовал, но в голове держу: вдруг придется)!
27 дек 07, 20:42    [5105230]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ещё раз - https://www.sql.ru/faq/faq_topic.aspx?fid=104

Сообщение было отредактировано: 28 дек 07, 06:28
28 дек 07, 06:28    [5105733]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
googman
Guest
б-с
где-то видел такой подход (for 2005й only):

create proc proc1
@tablename sysname
as
if object_id('MyTable') is not null
	drop SYNONYM MyTable
exec ('CREATE SYNONYM MyTable FOR '+@tablename)
SELECT top 1 * from MyTable
go

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


Поднимаю тему! Действительно, очень интересный подход. Есть ли какие-нибудь минусы у данного способа?
1 фев 08, 11:44    [5231555]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
googman
Есть ли какие-нибудь минусы у данного способа?

встречный вопрос:
а плюсы??
1 фев 08, 11:45    [5231564]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
googman
Guest
Smirnov Anton
googman
Есть ли какие-нибудь минусы у данного способа?

встречный вопрос:
а плюсы??


Имхо, удобство написания\чтения кода.
1 фев 08, 11:47    [5231576]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Glory
Member

Откуда:
Сообщений: 104751
googman
Smirnov Anton
googman
Есть ли какие-нибудь минусы у данного способа?

встречный вопрос:
а плюсы??


Имхо, удобство написания\чтения кода.

Ага. И вы проверяли как это будет работать в многопользовательской системе ?
1 фев 08, 11:50    [5231605]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
Glory
Ага. И вы проверяли как это будет работать в многопользовательской системе ?

+ тыща
1 фев 08, 11:54    [5231638]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
googman
Member

Откуда:
Сообщений: 118
Glory
googman
Smirnov Anton
googman
Есть ли какие-нибудь минусы у данного способа?

встречный вопрос:
а плюсы??


Имхо, удобство написания\чтения кода.

Ага. И вы проверяли как это будет работать в многопользовательской системе ?


Согласен, не подумал об этом. Вот, если можно было б создавать что-то вроде временного синонима (по аналогии с временными таблицами) - как удобно бы было.
1 фев 08, 11:57    [5231658]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Glory
Member

Откуда:
Сообщений: 104751
googman

Согласен, не подумал об этом. Вот, если можно было б создавать что-то вроде временного синонима (по аналогии с временными таблицами) - как удобно бы было.

Динамический запрос говорит о пробелах в проектировании. Имхо.
1 фев 08, 11:58    [5231675]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
googman
Smirnov Anton
googman
Есть ли какие-нибудь минусы у данного способа?

встречный вопрос:
а плюсы??


Имхо, удобство написания\чтения кода.
А то, что Вы дропаете синоним, никого не спрашивая, нормально? Кроме того
BOL
Для создания синонима в заданной схеме пользователь должен иметь разрешение CREATE SYNONYM и, либо владеть схемой, либо иметь разрешение ALTER SCHEMA
1 фев 08, 12:00    [5231691]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
googman
Member

Откуда:
Сообщений: 118
Glory
googman

Согласен, не подумал об этом. Вот, если можно было б создавать что-то вроде временного синонима (по аналогии с временными таблицами) - как удобно бы было.

Динамический запрос говорит о пробелах в проектировании. Имхо.


Говорит.
Но зачастую приходится дописывать чужие приложения, где ради мелких изменений\добавлений менять структуру БД очень не хочется.
1 фев 08, 12:02    [5231702]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Glory
Member

Откуда:
Сообщений: 104751
googman
Glory
googman

Согласен, не подумал об этом. Вот, если можно было б создавать что-то вроде временного синонима (по аналогии с временными таблицами) - как удобно бы было.

Динамический запрос говорит о пробелах в проектировании. Имхо.


Говорит.
Но зачастую приходится дописывать чужие приложения, где ради мелких изменений\добавлений менять структуру БД очень не хочется.

Это не означает, что ваши "мне так удобнее" должны стать стандартом продукта.
1 фев 08, 12:11    [5231789]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
googman
Member

Откуда:
Сообщений: 118
Glory
googman
Glory
googman

Согласен, не подумал об этом. Вот, если можно было б создавать что-то вроде временного синонима (по аналогии с временными таблицами) - как удобно бы было.

Динамический запрос говорит о пробелах в проектировании. Имхо.


Говорит.
Но зачастую приходится дописывать чужие приложения, где ради мелких изменений\добавлений менять структуру БД очень не хочется.

Это не означает, что ваши "мне так удобнее" должны стать стандартом продукта.


Также, как и не означает обратного. Я лишь высказался, что временные синонимы были бы удобной штукой. И, уверен, не для меня одного.
1 фев 08, 12:28    [5231923]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как передать имя таблицы в Stored Procedure?  [new]
#synonym
Guest
Так что, все еще не реализовали временный синоним?
Надоело пользоваться динамикой. Если запрос большой, то без подсветки синтаксиса беда. Плюс разные конкатенации...
Ошибок в проектировании нет. Хочется всего и сразу (чтобы было компактно и красиво) и не создавать кучу процедур на разные таблицы. Беда..
18 июл 12, 15:56    [12884159]     Ответить | Цитировать Сообщить модератору
 Re: Как передать имя таблицы в Stored Procedure?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
#synonym
Так что, все еще не реализовали временный синоним?
Надоело пользоваться динамикой. Если запрос большой, то без подсветки синтаксиса беда. Плюс разные конкатенации...
Ошибок в проектировании нет. Хочется всего и сразу (чтобы было компактно и красиво) и не создавать кучу процедур на разные таблицы. Беда..
Пишите в майкрософт, расскажите им, какой вы большой и клевый их кастомер, и как такая фича вам облегчила бы жизнь. Глядишь, через пару мажорных версий и сделают.
18 июл 12, 16:01    [12884191]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить