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

Откуда:
Сообщений: 170
Подскажите можно ли в качестве параметра хранимой процедуры использовать название таблицы?
4 май 12, 14:11    [12508037]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
в строковом виде какие проблемы
4 май 12, 14:12    [12508048]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
Мистер Хенки,

просто задают параметр,
@table_name varchar(20)


и использую:

dbo.@table_name


я правильно понимаю?
4 май 12, 14:14    [12508073]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
danton
я правильно понимаю?
Нет. Читайте FAQ, там есть.
4 май 12, 14:15    [12508083]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
neoddd
Member

Откуда:
Сообщений: 113
danton
dbo


Видимо у Вас MSSql Server. Нет, так вызвать нельзя. Копайте dynamic sql
4 май 12, 14:17    [12508098]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
neoddd,

ну да вроде же все в теме MS SQL Server)
4 май 12, 14:21    [12508147]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
neoddd
Member

Откуда:
Сообщений: 113
danton
neoddd,

ну да вроде же все в теме MS SQL Server)


Xa-xa, точно. Я новенький, перешел на тему из списка "последние за 3 дня" и не заметил :)
4 май 12, 14:34    [12508294]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
neoddd,

да динамические запросы супер, но для реализации например подобного запроса

UPDATE table_name
 SET table_name.ActualThedate = t.thedate
 FROM table_name
 LEFT JOIN  mart.dbo.[time] t
 ON table_name.theweek = t.theweek
 AND table_name.namedayofweek=t.namedayofweek
 WHERE t.theyear = datepart(yy,Getdate())  


где
table_name
- должна быть переменной
Проще сделать три разных запроса, я так понимаю, чем для каждой подстроки прописывать динимику.
4 май 12, 14:59    [12508526]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
danton
Проще сделать три разных запроса, я так понимаю, чем для каждой подстроки прописывать динимику.

В общем да.
4 май 12, 15:08    [12508621]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
Jovanny,

я просто не вкуриваю,как например в динамике такое прописать

SET table_name.ActualThedate = t.thedate


@SQL = varchar(max)
@table_name
SET @SQL = 'SET' +  @table_name.ActualThedate = t.thedate


Но как то некорректно это:

@table_name.ActualThedate = t.thedate
4 май 12, 15:16    [12508693]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
danton
я просто не вкуриваю,как например в динамике такое прописать
Прописать в динамике - это значит сделать строку, которая будет содержать ваш запрос, а потом выполнить этот запрос командой EXEC()

Например:

declare @table_name varchar(20) = 'моятаблица'
declare @sql varchar(max)

set @sql = 'select * from ' + @table_name

exec(@sql)


danton
SET table_name.ActualThedate = t.thedate

@SQL = varchar(max)
@table_name
SET @SQL = 'SET' +  @table_name.ActualThedate = t.thedate
Такой запрос и без динамики не выполнится - он просто непраывильный, в SQL Server такой синтаксис не поддерживается.
4 май 12, 15:28    [12508789]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
neoddd
Member

Откуда:
Сообщений: 113
danton
neoddd,

да динамические запросы супер, но для реализации например подобного запроса

UPDATE table_name
 SET table_name.ActualThedate = t.thedate
 FROM table_name
 LEFT JOIN  mart.dbo.[time] t
 ON table_name.theweek = t.theweek
 AND table_name.namedayofweek=t.namedayofweek
 WHERE t.theyear = datepart(yy,Getdate())  


где
table_name
- должна быть переменной
Проще сделать три разных запроса, я так понимаю, чем для каждой подстроки прописывать динимику.


danton, в данном вопросе нет общего критерия истинности. Возможны варианты:

1) несколько разных запросов (или ифы в процедуре)
2) динамический sql
3) формирование строки запроса в приложении
4) изменение структуры бд
4 май 12, 15:51    [12509000]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
neoddd
) изменение структуры бд


А это-то зачем? Академический интерес.
4 май 12, 18:04    [12510105]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
neoddd
Member

Откуда:
Сообщений: 113
Это для полноты картины мира :)
Всегда можно сделать "по другому"
4 май 12, 18:06    [12510115]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
iljy
Member

Откуда:
Сообщений: 8711
danton
Проще сделать три разных запроса, я так понимаю, чем для каждой подстроки прописывать динимику.

А можно сделать объединение из этих 3х таблиц в представление и менять его.
4 май 12, 18:54    [12510379]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
iljy,

Неудобно, таблицы Exchange из которых данные моментально переваливаются в основную
4 май 12, 18:57    [12510400]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
SET table_name.ActualThedate = t.thedate

@SQL = varchar(max)
@table_name
SET @SQL = 'SET' +  @table_name.ActualThedate = t.thedate
[/quot]Такой запрос и без динамики не выполнится - он просто непраывильный, в SQL Server такой синтаксис не поддерживается.[/quot]

Я не спорю и понимаю это)

Во ти хочу узнать как правильно...
4 май 12, 18:58    [12510404]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
danton
Member

Откуда:
Сообщений: 170
[quot neoddd]
danton
neoddd,

1) несколько разных запросов (или ифы в процедуре)
2) динамический sql
3) формирование строки запроса в приложении
4) изменение структуры бд


Думаю 1й вариант то, что нужно, а на счет изменения структуры... сами понимаете подстраиваемся под бизнесс, так сказать)
4 май 12, 19:00    [12510417]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
iljy
Member

Откуда:
Сообщений: 8711
danton
iljy,

Неудобно, таблицы Exchange из которых данные моментально переваливаются в основную

.... Не понял, какая связь.
4 май 12, 19:02    [12510421]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
danton
Я не спорю и понимаю это)

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

Я честно говоря, не знаю, что ещё можно добавить к
alexeyvg
Прописать в динамике - это значит сделать строку, которая будет содержать ваш запрос, а потом выполнить этот запрос командой EXEC()
или к
iljy
А можно сделать объединение из этих 3х таблиц в представление и менять его.


Просто непонятно, что вам надо и какие у вас возникли проблемы.
4 май 12, 20:22    [12510614]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1978
А как-то передать в переменную итог выполнения execute я могу? Скалярное значение в скалярную переменную.
9 июн 12, 17:47    [12695379]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
aleks2
Guest
alexeyvg
Я честно говоря, не знаю, что ещё можно добавить к


Ишо можно вспомнить табличные переменные.
9 июн 12, 18:27    [12695483]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
aleks2,

при чем тут вообще табличные переменные? вы предлагаете в зависимости от параметра записывать в табличную переменную то или иное, а запрос строить уже к ней?
9 июн 12, 20:48    [12695817]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы в качестве параметра процедуры  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
DaniilSeryi
А как-то передать в переменную итог выполнения execute я могу? Скалярное значение в скалярную переменную.

Можете какой-нибудь код передать в return. Например:
use tempdb;
go
create proc getdbid @name int
as
go
alter proc getdbid @name sysname
as
return db_id(@name)
go
declare @dbid int;
exec @dbid = getdbid 'opt'
select @dbid;
go
drop proc getdbid;

но лучше используйте выходные параметры....
9 июн 12, 20:58    [12695850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить