【发布时间】:2014-07-30 04:53:28
【问题描述】:
我第一次尝试创建存储过程(使用 VS2012 进行编辑)我试图将我的存储过程传递给一个包含两列的表。但是,当我单击解析检查我的代码时,我收到以下错误。
消息 156,第 15 级,状态 1,第 1 行
关键字“AS”附近的语法不正确。消息 102,级别 15,状态 1,过程 SaveMsgData,第 10 行
'READONLY' 附近的语法不正确。消息 1087,级别 15,状态 2,过程 SaveMsgData,第 45 行
必须声明表变量“@tagList”。
我认为最后两个错误源于第一个,但我不知道是什么导致了第一个。据我所知,我的语法是正确的。
这是我的完整代码。
CREATE TYPE TagListType AS TABLE
(
TagID varchar(100),
AntNum int
);
GO
CREATE PROCEDURE SaveMsgData
@Mac nvarchar(30),
@tagList TagListType READONLY
AS
DECLARE @ReaderID int
DECLARE @AntList TABLE (AntennaID int, AntNum int)
SELECT @ReaderID = -1
SELECT @ReaderID = Id
FROM dbo.Readers
WHERE MAC = @Mac
IF (@ReaderID >= 0)
BEGIN
INSERT INTO @AntList (AntennaID,Antnum,TargetNumOfTags)
SELECT id, AntennaNumber, numOfTags
FROM Antennae
WHERE ID = @ReaderID
DECLARE @count int
DECLARE @len int
SET @count = 0
SET @len = 0
WHILE @count <= @len
BEGIN
DECLARE @LocalAnt int
DECLARE @LocalTarget int
DECLARE @LocalAntID int
DECLARE @LocalStatus int
DECLARE @LocalTagsRead int
SELECT @LocalAnt = Antnum, @LocalTarget = TargetNumOfTags, @LocalAntID = AntID
FROM #AntList
WHERE Antnum = @count
SELECT @LocalTagsRead = COUNT(*) FROM @tagList WHERE AntNum = @count
IF @LocalTagsRead = @LocalTarget
BEGIN
SET @LocalStatus = 0
END
ELSE
BEGIN
SET @LocalStatus = 1
END
INSERT INTO Readings
VALUES (@LocalStatus, @LocalTarget, @LocalTagsRead, CURRENT_TIMESTAMP, @LocalAntID, @ReaderID)
--Will insert Tags in to tag table here later.
SET @count = @count + 1
END
END
GO
这里的目的是让我的 C# 桌面应用程序使用这个存储过程。
【问题讨论】:
标签: sql-server tsql stored-procedures