powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Для процедуры в качестве параметра User-Defines Table Types
25 сообщений из 44, страница 1 из 2
Для процедуры в качестве параметра User-Defines Table Types
    #38212548
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TYPE [dbo].[InsertedTableType] AS TABLE(
[ID] [uniqueidentifier] NOT NULL,
[MessageType] [nchar](6) NOT NULL,
[StoreID] [nvarchar](9) NOT NULL,
[CreateDate] [datetime] NOT NULL,
[CreateUTCDate] [datetime] NOT NULL,
[ReceiveDate] [datetime] NOT NULL,
[ReceiceUTCDate] [datetime] NULL,
[XMLData] [xml] NULL,
[BinaryDataID] [uniqueidentifier] NULL
)

DECLARE @inserted AS InsertedTableType
INSERT INTO @inserted
SELECT *
FROM dbo.MessageReceive

print 'ParseMessage' + '00001 '+@inserted

Ошибка "Must declare the scalar variable "@inserted"."

Подскажите, как можно обойти данную ошибку.
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212551
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Подскажите, как можно обойти данную ошибку.
Поставить после команды CREATE TYPE разделитель пакетов GO
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212554
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

Тип был создан уже давно, здесь он для примера
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212560
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Тип был создан уже давно, здесь он для примера
В какой базе ?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212561
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Glory,

Тип был создан уже давно, здесь он для примера
в этом примере надо поставить GO
а если он уже есть в текущей базе, то такой ошибки не появляется
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212563
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,

в моем примере данный метод не работает только при слежении текста с @inserted, если подставлять @inserted как параметр для процедуры, то все работает. Т.е. в таком случае - работает:

exec sp1 @inserted - работает
exec 'Проц' + sp1 @inserted - ошибка
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212565
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

в этой же
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212572
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06print 'ParseMessage' + '00001 '+@inserted
А как вы себе представляете конкатенацию таблицы со строкой ?
Чего тогда не print Mytable ?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212575
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

а что должна вывести команда print 'ParseMessage' + '00001 '+@inserted для табличной переменной?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212586
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

ALTER TRIGGER [dbo].[trig_ins_mt]
ON [dbo].[MessageReceive]
AFTER INSERT
AS
BEGIN
DECLARE @sql varchar(500)
DECLARE @inserted AS InsertedTableType
DECLARE @mt NCHAR(6)
SET @mt = (
SELECT MessageType
FROM INSERTED
)
INSERT INTO @inserted
SELECT *
FROM INSERTED

set @sql = 'ParseMessage' + (select replace(MessageType,'.','') from INSERTED)+ ' '+@inserted
EXEC (@sql)

Т.е. в триггере должна выполняться процедура, которая в которой вторая часть = MessageType

При это - ошибка
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212590
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

вам еще раз говорят что

Код: sql
1.
2.
3.
4.
5.
declare @t table (i int)
print @t
-----------
Msg 137, Level 16, State 1, Line 2
Must declare the scalar variable "@t".
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212595
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Т.е. в триггере должна выполняться процедура, которая в которой вторая часть = MessageType
Вы серьезно считаете, что таблицы можно использовать в любой команде ?
Я вас разочарую
К табличным переменным можно применять только теже DML команды, что и к обычным таблицам
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212597
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx,

я это понимаю. Просто прошу помочь как в таком случае выполнить процедуру с параметром table type?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212601
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Просто прошу помочь как в таком случае выполнить процедуру с параметром table type?
убрать print
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212603
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

Тогда,что по вашему делает вот ето
Код: sql
1.
2.
set @sql = 'ParseMessage' + (select replace(MessageType,'.','') from INSERTED)+ ' '+@inserted
EXEC (@sql)


???
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212607
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Таким образом все работает:exec sp1 @inserted. Как сделать что бы так: exec 'текст'+sp1 @inserted.
Или это просто нельзя?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212610
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx,

выполняет exec (ParseMessage00001 @inserted)
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212621
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Как сделать что бы так: exec 'текст'+sp1 @inserted.
Я смотрю вы горазды на придумывание синтаксиса.
Транслятора потока сознания в TSQL еще не изобрели.
Придется подождать
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212634
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

короче таким образом работать не будет.

У меня просто сделано таким образом:
DECLARE @inserted AS InsertedTableType
INSERT INTO @inserted
SELECT *
FROM INSERTED
if (select messagetype from inserted) = '00.001'
exec sp1 @inserted


Заказчик захотел избавиться от ифов (if). Просто messagetype - ов будет около 15
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212635
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

Покажите объявление любой из ParseMessageXXXX
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212644
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Заказчик захотел избавиться от ифов (if). Просто messagetype - ов будет около 15
И поэтому теперь можно с таблицами работать как текстовыми строками ?
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212661
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

ALTER PROCEDURE [dbo].[ParseMessage00001]
@tm InsertedTableType READONLY
AS
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212685
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

ИМХО, хрень у вас какая-то с логикой... Если в inserted будет несколько строк, да еще с одинаковым MessageType, тогда как? Ну да ладно, дело ваше.

Триггер должен выглядеть примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
alter trigger dbo.trig_ins_mt
on dbo.MessageReceive
after insert
as
begin
 set nocount on;
 
 declare @inserted as InsertedTableType;
 declare @proc sysname;
 
 insert into @inserted
 select
  *
 from
  inserted;
  
 declare c cursor local fast_forward for
  select
   'ParseMessage' + MessageType
  from
   inserted;
 
 open c;
 fetch next from c into @proc;
 while @@fetch_status = 0
  begin
   exec @proc @inserted;
   
   fetch next from c into @proc;
  end;
 close c;
 deallocate c;
end;
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212692
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

а разве в inserted может быть несколько строк? по идее должна быть одна
...
Рейтинг: 0 / 0
Для процедуры в качестве параметра User-Defines Table Types
    #38212700
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06invm,

а разве в inserted может быть несколько строк? по идее должна быть однаПо чьей это идее?
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Для процедуры в качестве параметра User-Defines Table Types
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]