Значение поля как название таблицы

Proggirl
Дата: 07.06.2011 16:19:55
Здравствуйте. Есть одна мысль, но не знаю можно ли ее осуществить. Она заключается в том , есть таблица Sale.
create table sale
(ID int NOT NULL,
ID_old int NOT NULL,
[table] char [10] NOT NULL,
info  char[200] NOT NULL,
DateOfCustom datetime NOT NULL,
[Count] int NOT NULL,
Price int,
Constraint Primary key PK_Sale([ID]))
нужно использовать поле [table] как название таблицы,пыталась написать триггер на вставку типа:
Update [table]
set [table].[count]=[table].[count]
where [table].ID=ID_Old
конечно же так оно не работает. Но как сделать так, чтобы оно заработало? и возможно ли вообще это осуществить?
Гавриленко Сергей Алексеевич
Дата: 07.06.2011 16:23:31
Proggirl
Дата: 07.06.2011 16:35:30
спасибо
iap
Дата: 07.06.2011 16:49:59
Proggirl,

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

И вот что интересно, SET [table].[count]=[table].[count] вроде как логически ничего не меняет. Правда же?
Однако затрагивает целиком всю таблицу.

Можно использовать одну постоянную таблицу [tab] с дополнительной колонкой, содержащей значение [table].
Тогда в триггере FOR INSERT
update [tab]
set [tab].[count]=[inserted].[count]
from [inserted]
where [tab].[ID]=[inserted].[ID_Old] and [tab].[table]=[inserted].[table]
В смысл самого апдейта я не вникал...
Proggirl
Дата: 07.06.2011 17:40:39
я, оказывается, не до конца дописала
Update [table]
set [table].[count]=[table].[count][b]-count[/b]
where [table].ID=ID_Old
сейчас пытаюсь сделать через динамический запрос
CREATE TRIGGER CountChange
    ON Sale 
     FOR INSERT
  AS
   Declare @ID_old int, @table int, @count int, @SQL varchar(80), @ID int
begin
 set @SQL=' Update dbo.'+@table

exec(@SQL)
set [count]=[count]-@count
where Id=@ID_old
end
Where sale.ID=@ID
но выдает ошибку возле count...
Glory
Дата: 07.06.2011 17:43:59
Proggirl
но выдает ошибку возле count...

Вы ссылку точно прочитали ?
Динамический запрос - это не макроподстановка в другой запрос
Это полностью правильно написанный запрос
gar
Дата: 07.06.2011 17:46:28
set @SQL=' Update dbo.'+@table + ' set [count]=[count]-@count where Id=@ID_old'

exec(@SQL)
Proggirl
Дата: 07.06.2011 17:47:30
Glory,

Видно как-то я это пропустила. теперь поняла. спасибо...
flexgen
Дата: 07.06.2011 18:05:01
Proggirl
я, оказывается, не до конца дописала
Update [table]
set [table].[count]=[table].[count][b]-count[/b]
where [table].ID=ID_Old
сейчас пытаюсь сделать через динамический запрос
CREATE TRIGGER CountChange
    ON Sale 
     FOR INSERT
  AS
   Declare @ID_old int, @table int, @count int, @SQL varchar(80), @ID int
begin
 set @SQL=' Update dbo.'+@table

exec(@SQL)
set [count]=[count]-@count
where Id=@ID_old
end
Where sale.ID=@ID
но выдает ошибку возле count...


Попробуй обойтись без динамики, что-то вроде этого (код не проверял, вместо Mytable подставь свою таблицу) :

CREATE TRIGGER CountChange
ON Sale 
AFTER INSERT

AS

begin
  Update dbo.Mytable 
  set [count] = b.[count] - a.[count]
  from inserted a
  join dbo.Mytable b
  on a.ID = b.ID
end
Proggirl
Дата: 07.06.2011 19:41:43
Пыталась сделать в триггере, но на таблицу Sale уже есть триггер на добавление. И не выполняется не одно не другое. пытаюсь сделать в хранимой процедуре. тогда выполняется все кроме этого вычитания....
CREATE PROCEDURE dbo.SP_Insert_Sale

AS INSERT INTO dbo.Sale
                      (ID_old,[table],info,DateOfCustom,[Count],Price)
SELECT    ID_old,[table],info,DateOfCustom,[Count],Price
FROM         dbo.Basket
Declare @SQL varchar(80),@count int,@ID_old int, @table int
set @SQL=' Update dbo.'+@table + ' set [count]=[count]-@count where Id=@ID_old'

exec(@SQL)
GO