Sql server SQL Server创建表

Sql server SQL Server创建表,sql-server,Sql Server,谢谢大家,我怎样才能为这个问题创建程序。这对我会有帮助的。我需要知道创建程序,以便在SQL Server中存储数据 感谢您的帮助,我使用的是twin cat 3 PLC程序,我的数据包数据是4144010203040506。我向MSSQLServer发送数据时就是这样。当我发送每个列的数据为(arg),但我想存储数据时,arg4到arg9是一列 arg 1:= F_STRING(Time stamp),arg 2:= F_byte(id) (41),arg 3:= F_byte(length)

谢谢大家,我怎样才能为这个问题创建程序。这对我会有帮助的。我需要知道创建程序,以便在SQL Server中存储数据

感谢您的帮助,我使用的是twin cat 3 PLC程序,我的数据包数据是4144010203040506。我向MSSQLServer发送数据时就是这样。当我发送每个列的数据为(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).
这里arg1和arg2不是数组类型。它的单字节值。和arg 4到arg 9字符串数组类型。现在我想像这样在一个表中存储数据。我的桌子结构。我想把所有数据存储在一起,一列一行

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

如果我理解你的问题,我想你应该使用像这样的存储

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
希望这有帮助


Dex

首先,您需要创建一个表,该表将包含
时间戳
id
长度
数据id

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 @i=@i+1
        SET @s=@s+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
您将在表
数据包
中看到:

pd_timestamp            id  length  dataid
2016-06-18 18:24:28.153 41  44      1
dataid  data_value
1       01
1       02
1       03
1       04
1       05
1       06
在表
主数据中

pd_timestamp            id  length  dataid
2016-06-18 18:24:28.153 41  44      1
dataid  data_value
1       01
1       02
1       03
1       04
1       05
1       06

您的问题很不清楚,您是在问如何存储数据还是如何创建程序?SQL Server没有“数组”数据类型,您不应该在单个列中存储多个数据段(这违反了关系设计的第一个基本标准形式)…感谢您的帮助,我编写了如何在数据库中发送数据的程序,请你现在帮我一下好吗。