2016-06-18 110 views
-3

感謝大家,我如何爲這個問題創建程序。這對我有幫助。我需要知道創建程序來將數據存儲在SQL Server中。SQL Server創建表

感謝您的幫助,我正在使用雙貓3 PLC程序,我的數據包數據是4144010203040506.我發送的數據是MS SQL服務器。當我發送數據是(arg)爲每列,但我想存儲數據arg4到arg9是一列。

arg 1:= F_STRING(Time stamp),arg 2:= F_byte(id) (41),arg 3:= F_byte(length) (44),arg 4:= F_string (read data [0]) (01),arg 5:= F_string (read data [1])(02),arg 6:= F_string (read data [2]) (03),arg 7:= F_string (read data [3]) (04),arg 8:= F_string (read data [4]) (05),arg 9:= F_string (read data [5]) (06). 

這裏arg 1和arg 2不是數組類型。其單字節值。和arg 4到arg 9字符串數組類型。現在我想像這樣在數據表中存儲數據。我的表結構。我想將所有data_value一起存儲在一行中。

pd_time stamp    id length data_value 
    2016-06-18 18:24:28.153 41  44 010203040506 
+2

你的問題還不清楚,你問如何存儲數據或如何創建一個程序? –

+1

SQL Server *不具有「數組」數據類型,並且您*不應該*在單列中存儲多個數據塊(即**違反了關係設計的基本第一範式).... –

回答

0

,如果我明白你的問題,我認爲你應該使用一個存儲這樣的..

CREATE PROCEDURE InsertDataIntoTable 
    @dataToStore NVARCHAR(MAX) 
AS 
BEGIN 
declare @TS TIMESTAMP; 
declare @ID INT; 
declare @LN INT; 
declare @DT NVARCHAR(50); 

set @TS = CURRENT_TIMESTAMP; 
set @ID = SUBSTRING(@dataToStore, 1,2); 
set @TS = SUBSTRING(@dataToStore, 3,2); 
set @TS = SUBSTRING(@dataToStore, 5,LEN(@dataToStore)-4); 

INSERT INTO yourTableName 
    (TS, Id, LN, Data) 
VALUES 
    (@TS, @ID, @LN, @DT) 
END 
GO 

希望這有助於

敏捷

0

首先,你需要創建表將保留timestamp,id,lengthdataid

CREATE TABLE packet_data (
    pd_timestamp datetime NOT NULL, 
    id int NOT NULL, 
    [length] int NOT NULL, 
    dataid int IDENTITY (1,1) NOT NULL, 
CONSTRAINT PK_packet_data PRIMARY KEY CLUSTERED (dataid), 
) 

然後表,將持有的數據部分:

CREATE TABLE main_data (
    dataid int NOT NULL, 
    data_value nvarchar(10) NOT NULL 
    CONSTRAINT PK_main_data PRIMARY KEY CLUSTERED (dataid, data_value) 
) 

然後加入FK:

ALTER TABLE main_data ADD 
CONSTRAINT FK_main_data_packet_data FOREIGN KEY (dataid) 
    REFERENCES packet_data (dataid) 
    ON DELETE CASCADE  
    ON UPDATE CASCADE 

所以你會得到一個一對多的關係,通過dataid字段來存儲你的數據標準化。

然後用SP來加載數據:

CREATE PROCEDURE add_data 
    @string nvarchar(max) 
AS 
BEGIN 
    DECLARE @id int, 
      @length int, 
      @data_array nvarchar(max),@xml xml, 
      @n int = 0, @i int = 0, @s int = 3, 
      @current datetime = GETDATE() 

    SELECT @id = CAST(LEFT(@string,2) as int), 
      @length = CAST(SUBSTRING(@string,3,2) as int), 
      @data_array = RIGHT(@string,LEN(@string)-4) 

    SELECT @n = LEN(@data_array)/2 - 1 

    WHILE @n > @i 
    BEGIN 
     SELECT @data_array = STUFF(@data_array,@s,0,'-') 
     SET @[email protected]+1 
     SET @[email protected]+3 
    END 

    SELECT @xml = CAST('<a>'+REPLACE(@data_array,'-','</a><a>') + '</a>' as xml) 

    INSERT INTO packet_data ([pd_timestamp], [id], [length]) 
    VALUES (@current, @id, @length) 

    INSERT INTO [dbo].[main_data] 
    SELECT @@IDENTITY, 
      t.v.value('.','nvarchar(10)') 
    FROM @xml.nodes('/a') as t(v) 
END 

如果執行你的SP,如:

EXEC add_data N'4144010203040506' 

你會得到這個表packet_data

pd_timestamp   id length dataid 
2016-06-18 18:24:28.153 41 44  1 

在表main_data

dataid data_value 
1  01 
1  02 
1  03 
1  04 
1  05 
1  06 
+0

感謝您的幫助,我寫了我的程序如何發送數據庫中的數據,請你現在可以幫助我。 –