Sql server SQL Server创建表
谢谢大家,我怎样才能为这个问题创建程序。这对我会有帮助的。我需要知道创建程序,以便在SQL Server中存储数据 感谢您的帮助,我使用的是twin cat 3 PLC程序,我的数据包数据是4144010203040506。我向MSSQLServer发送数据时就是这样。当我发送每个列的数据为(arg),但我想存储数据时,arg4到arg9是一列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)
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没有“数组”数据类型,您不应该在单个列中存储多个数据段(这违反了关系设计的第一个基本标准形式)…感谢您的帮助,我编写了如何在数据库中发送数据的程序,请你现在帮我一下好吗。