Advertisement
Guest User

Untitled

a guest
Feb 19th, 2013
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.60 KB | None | 0 0
  1. use [broker]
  2. go
  3.  
  4. alter database [broker] set enable_broker with rollback immediate;
  5. GO
  6.  
  7. CREATE TABLE log_line (
  8.     log_line_id INT identity(1, 1) NOT NULL,
  9.     log_line_ts TIMESTAMP,
  10.     device_id varchar(128) not null,
  11.     application_name VARCHAR(64) NOT NULL,
  12.     application_user_name VARCHAR(6) NOT NULL DEFAULT '',
  13.     log_line_dt DATETIME NOT NULL
  14.     log_line_message VARCHAR(max) CONSTRAINT pk_log_line_id PRIMARY KEY (log_line_id)
  15.     )
  16. GO
  17.  
  18.    
  19. CREATE MESSAGE TYPE [mtInsertLogLine] VALIDATION = WELL_FORMED_XML
  20. go
  21.  
  22. CREATE CONTRACT [cInsertLogLine]
  23. (
  24.     [mtInsertLogLine] SENT BY ANY
  25. )
  26. go
  27.  
  28. CREATE QUEUE qReceiveLogLine
  29.     WITH RETENTION = ON, --can decrease performance
  30.         STATUS = ON;
  31. GO
  32.  
  33. CREATE QUEUE qInsertLogLine
  34.     WITH RETENTION = ON; --can decrease performance
  35. GO
  36.  
  37. CREATE PROCEDURE spInsertLogLine
  38. AS
  39. BEGIN
  40.     SET NOCOUNT ON;
  41.  
  42.     DECLARE @Handle UNIQUEIDENTIFIER;
  43.     DECLARE @MessageType SYSNAME;
  44.     DECLARE @Message XML;
  45.     DECLARE @device_id VARCHAR(128);
  46.     DECLARE @application_name VARCHAR(64);
  47.     DECLARE @application_user_name VARCHAR(6);
  48.     DECLARE @log_line_dt DATETIME;
  49.     DECLARE @log_line_message VARCHAR(max);
  50.  
  51.     RECEIVE TOP (1) @Handle = conversation_handle,
  52.         @MessageType = message_type_name,
  53.         @Message = message_body
  54.     FROM [qInsertLogLine]
  55.  
  56.     IF (
  57.             @Handle IS NOT NULL
  58.             AND @Message IS NOT NULL
  59.             )
  60.     BEGIN
  61.         SELECT @device_id = CAST(@Message.query('/log_line/device_id/text()') AS NVARCHAR(MAX))
  62.    
  63.         SELECT @application_name = CAST(@Message.query('/log_line/application_name/text()') AS NVARCHAR(MAX))
  64.  
  65.         SELECT @application_user_name = CAST(@Message.query('/log_line/application_user_name/text()') AS NVARCHAR(MAX))
  66.  
  67.         SELECT @log_line_dt = CAST(CAST(@Message.query('/log_line/log_line_dt/text()') AS NVARCHAR(MAX)) AS DATETIME)
  68.  
  69.         SELECT @log_line_message = CAST(@Message.query('/log_line/log_line_message/text()') AS NVARCHAR(MAX))
  70.  
  71.         INSERT INTO log_line (
  72.           device_id,
  73.             application_name,
  74.             application_user_name,
  75.             log_line_dt,
  76.             log_line_message
  77.             )
  78.         VALUES (
  79.           @device_id,
  80.             @application_name,
  81.             @application_user_name,
  82.             @log_line_dt,
  83.             @log_line_message
  84.             );
  85.     END
  86. END
  87. GO
  88.  
  89. ALTER QUEUE qInsertLogLine WITH ACTIVATION
  90.  (
  91.       STATUS = ON,
  92.       MAX_QUEUE_READERS = 5, --number of concurrent instances of spInsertLogLine
  93.       PROCEDURE_NAME = spInsertLogLine,
  94.       EXECUTE AS OWNER
  95.  );
  96.  GO
  97.  
  98. CREATE SERVICE sReceiveLogLine ON QUEUE qReceiveLogLine([cInsertLogLine])
  99. go
  100.  
  101. CREATE SERVICE sInsertLogLine ON QUEUE qInsertLogLine([cInsertLogLine])
  102. go
  103.  
  104. create PROCEDURE spSendLogLine
  105. (
  106.     @device_id varchar(128),
  107.     @application_name VARCHAR(64),
  108.     @application_user_name VARCHAR(6),
  109.     @log_line_dt DATETIME,
  110.     @log_line_message VARCHAR(max)
  111. )
  112. AS
  113. BEGIN
  114.  
  115.       DECLARE @MessageBody XML
  116.       CREATE TABLE #ProcParams
  117.       (
  118.         device_id varchar(128),
  119.                 application_name VARCHAR(64),
  120.                 application_user_name VARCHAR(6),
  121.                 log_line_dt DATETIME,
  122.                 log_line_message VARCHAR(max)
  123.       )
  124.       INSERT INTO #ProcParams (device_id,application_name,application_user_name,log_line_dt,log_line_message)
  125.       VALUES(@device_id, @application_name, @application_user_name, @log_line_dt, @log_line_message)
  126.  
  127.       SELECT @MessageBody = (SELECT * FROM #ProcParams FOR XML PATH ('log_line'), TYPE);
  128.  
  129.       DECLARE @Handle UNIQUEIDENTIFIER;
  130.  
  131.       BEGIN DIALOG CONVERSATION @Handle
  132.             FROM SERVICE [sReceiveLogLine]
  133.             TO SERVICE '[sInsertLogLine]'    
  134.             ON CONTRACT [cInsertLogLine]    
  135.             WITH ENCRYPTION = off;  
  136.                    
  137.             SEND ON CONVERSATION @handle    
  138.                      MESSAGE TYPE [mtInsertLogLine]
  139.                      ( @MessageBody );      
  140.  
  141. END
  142. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement