SQL Server:存储过程(新手)

时间:2011-10-20 15:20:50

标签: sql stored-procedures

我已经完成了一些网络搜索,但无法找到任何可以解决我的1 x数据库表和2 x存储过程的问题。我是这个主题的新手,所以任何帮助都很有用。

我有2个存储过程。其中一个查询来自另一个数据库(GetRawDataFromIHistorian)和另一个(GasNominationsRawData_Insert)的原始数据应该在执行时将这些数据INSERT到表中。

我的第一个SP工作,但我似乎无法将其插入我名为GasRawData的表中。在执行插入SP时显示的消息是......

“Msg 201,Level 16,State 4,Procedure GasNominationsRawData_Insert,Line 0 过程或函数'GasNominationsRawData_Insert'需要参数'@timestamp',这是未提供的。“

我的第一个SP(GetRawDataFromIHistorian)看起来像这样......

ALTER PROCEDURE [dbo].[GetRawDataFromIHistorian] 

AS
SET NOCOUNT ON;

SELECT [timestamp], Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) AS TagName,
CONVERT(decimal(10, 2), ROUND(value, 2)) AS Value
FROM 
OPENQUERY(IHISTORIAN,'
    SELECT timestamp, tagname, value
    FROM ihRawData
    WHERE tagname = "UMIS.99FC9051.F_CV"
    OR tagname = "UMIS.99F851C.F_CV"
    AND timestamp BETWEEN ''2011-10-18 05:00:00.000'' AND ''2011-10-19 06:00:00.000''
    AND samplingmode =Calculated
    AND calculationmode =Average
    AND intervalmilliseconds =1h
    ORDER BY tagname, timestamp
    ')

我的INSERT SP(GasNominationsRawData_Insert)如下......

ALTER PROCEDURE [dbo].[GasNominationsRawData_Insert]
    @timestamp DATETIME,
    @TagName NVARCHAR(50),
    @Value REAL

AS

INSERT INTO dbo.GasRawData (timestamp,
                TagName,
                Value)
VALUES (@timestamp,
        @TagName,
        @Value);

SELECT SCOPE_IDENTITY() AS NewRecordID;

我只是想从GetRawDataFromIHistorian查询中获取结果,并使用GasNominationsRawData_Insert来填充GasRawData表。

我的GasRawData表中有4列......

RecordID (PK, int, not null)
timestamp (datetime, not null)
tagname (nvarchar(50), not null)
value (real, not null)

2 个答案:

答案 0 :(得分:0)

问题似乎是在调用GasNominationsRawData_Insert过程时,因为您没有传递预期的参数。你能告诉我们你是如何执行该存储过程的吗?此外,您应该只有一个存储过程,请尝试:

CREATE PROCEDURE dbo.GasNominationsRawData_Insert
AS
SET NOCOUNT ON;

INSERT INTO dbo.GasRawData (timestamp,TagName,Value)
SELECT [timestamp], Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) AS TagName,
CONVERT(decimal(10, 2), ROUND(value, 2)) AS Value
FROM 
OPENQUERY(IHISTORIAN,'
    SELECT timestamp, tagname, value
    FROM ihRawData
    WHERE tagname = "UMIS.99FC9051.F_CV"
    OR tagname = "UMIS.99F851C.F_CV"
    AND timestamp BETWEEN ''2011-10-18 05:00:00.000'' AND ''2011-10-19 06:00:00.000''
    AND samplingmode =Calculated
    AND calculationmode =Average
    AND intervalmilliseconds =1h
    ORDER BY tagname, timestamp
    ')

答案 1 :(得分:0)

此错误消息表明您没有将值传递给所需的@timestamp参数

Msg 201,Level 16,State 4,Procedure GasNominationsRawData_Insert,Line 0过程或函数'GasNominationsRawData_Insert'需要参数'@timestamp',这是未提供的。

解决方案是传入参数或通过添加默认值使其成为可选项。

如果您可以将代码发布到调用程序的位置,我们可以提供更多帮助