|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
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"." Подскажите, как можно обойти данную ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:05 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Подскажите, как можно обойти данную ошибку. Поставить после команды CREATE TYPE разделитель пакетов GO ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:06 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Glory, Тип был создан уже давно, здесь он для примера ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:07 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Тип был создан уже давно, здесь он для примера В какой базе ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:09 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Glory, Тип был создан уже давно, здесь он для примера в этом примере надо поставить GO а если он уже есть в текущей базе, то такой ошибки не появляется ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:09 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06, в моем примере данный метод не работает только при слежении текста с @inserted, если подставлять @inserted как параметр для процедуры, то все работает. Т.е. в таком случае - работает: exec sp1 @inserted - работает exec 'Проц' + sp1 @inserted - ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:10 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Glory, в этой же ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:11 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06print 'ParseMessage' + '00001 '+@inserted А как вы себе представляете конкатенацию таблицы со строкой ? Чего тогда не print Mytable ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:12 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06, а что должна вывести команда print 'ParseMessage' + '00001 '+@inserted для табличной переменной? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:13 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
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 При это - ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:17 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06, вам еще раз говорят что Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:19 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Т.е. в триггере должна выполняться процедура, которая в которой вторая часть = MessageType Вы серьезно считаете, что таблицы можно использовать в любой команде ? Я вас разочарую К табличным переменным можно применять только теже DML команды, что и к обычным таблицам ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:21 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Maxx, я это понимаю. Просто прошу помочь как в таком случае выполнить процедуру с параметром table type? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:21 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Просто прошу помочь как в таком случае выполнить процедуру с параметром table type? убрать print ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:22 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06, Тогда,что по вашему делает вот ето Код: sql 1. 2.
??? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:23 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Glory, Таким образом все работает:exec sp1 @inserted. Как сделать что бы так: exec 'текст'+sp1 @inserted. Или это просто нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:25 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Maxx, выполняет exec (ParseMessage00001 @inserted) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:27 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Как сделать что бы так: exec 'текст'+sp1 @inserted. Я смотрю вы горазды на придумывание синтаксиса. Транслятора потока сознания в TSQL еще не изобрели. Придется подождать ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:29 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
Glory, короче таким образом работать не будет. У меня просто сделано таким образом: DECLARE @inserted AS InsertedTableType INSERT INTO @inserted SELECT * FROM INSERTED if (select messagetype from inserted) = '00.001' exec sp1 @inserted Заказчик захотел избавиться от ифов (if). Просто messagetype - ов будет около 15 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:33 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06, Покажите объявление любой из ParseMessageXXXX ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:33 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
beaver06Заказчик захотел избавиться от ифов (if). Просто messagetype - ов будет около 15 И поэтому теперь можно с таблицами работать как текстовыми строками ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:36 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
invm, ALTER PROCEDURE [dbo].[ParseMessage00001] @tm InsertedTableType READONLY AS ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:44 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:54 |
|
Для процедуры в качестве параметра User-Defines Table Types
|
|||
---|---|---|---|
#18+
invm, а разве в inserted может быть несколько строк? по идее должна быть одна ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:57 |
|
|
start [/forum/topic.php?fid=46&msg=38212603&tid=1707588]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 402ms |
0 / 0 |