我具有以下存储过程,并且收到此错误消息:
“ 01”附近的语法不正确
我还有其他以“ 01”开头的存储过程,它们工作正常。我不确定错误的语法在哪里。
感谢任何潜在客户。
这是我的表结构:
CREATE TABLE [dbo].[01_news_test]
(
[interestid] [INT] IDENTITY(1, 1) NOT FOR REPLICATION NOT NULL,
[username] [VARCHAR](50) NULL,
[approval] [BIT] NULL,
CONSTRAINT [PK_news_test]
PRIMARY KEY CLUSTERED ([interestid] DESC)
WITH (pad_index = OFF, statistics_norecompute = OFF,
ignore_dup_key = OFF, allow_row_locks = on,
allow_page_locks = on, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
这是存储过程的代码(如下):
ALTER PROCEDURE [dbo].[01_cms_news_mgr_bull_appr_update]
@InterestID INT,
@Approval BIT
AS
DECLARE @sql NVARCHAR(4000)
SELECT @sql = ' UPDATE [01_news_test] ' +
' SET ' +
' Approval = @Approval ' +
' WHERE '
IF @InterestID IS NOT NULL
SELECT @sql = @sql + ' InterestID = @InterestID'
SELECT @sql = @sql + '; '
EXEC sp_executesql @sql, N'@InterestID INT, @Approval BIT', InterestID, Approval
并且,这是在SQL Server Management Studio中执行存储过程时的代码:
DECLARE @return_value INT
EXEC @return_value = [dbo].[01_cms_news_mgr_bull_appr_update]
@InterestID = 1,
@Approval = 0
SELECT 'Return Value' = @return_value
GO
最后,产生的错误消息:
第15级状态1行1的消息102
'01'附近的语法不正确
更新:尽管我现在遇到了错误,但在表名周围添加了一个括号,以解决“语法错误”的错误
将数据类型nvarchar转换为int时出错
答案 0 :(得分:0)
如前所述,避免任何动态的查询构建,因为不需要动态修改表或列之类的结构组件。参数可以直接在声明的SQL语句中使用。
ALTER PROCEDURE [dbo].[01_cms_news_mgr_bull_appr_update]
@InterestID INT,
@Approval BIT
AS
BEGIN
UPDATE [01_news_test]
SET Approval = @Approval
WHERE InterestID = @InterestID
END
答案 1 :(得分:0)
您存储的01_cms_new_mgr_bull_appr_update proc没有显式返回值,因此,它可能返回0或-1,表明proc由于某种原因完成或失败。
然后,您的声明:
SELECT 'Return Value' = @return_value
GO
将不会返回名称为[Return Value]且值为@return_value的列。可能会尝试将@return_value(int)分配给const char字符串“ Return Value”。您可以尝试:
SELECT @return_value AS return_value
GO
OR
SELECT 'Return Value = ' + @return_value AS return_string
GO
答案 2 :(得分:0)
该解决方案最终出现在我的代码的最后一行,最后两个变量前面加上了“ @”。
我在下面发布了解决方案:
ALTER PROCEDURE [dbo].[01_cms_news_mgr_bull_appr_update]
@InterestID INT,
@Approval BIT AS
DECLARE @sql NVARCHAR(4000)
SELECT @sql = ' UPDATE [01_news_test] ' +
' SET ' +
' Approval = @Approval ' +
' WHERE '
IF @InterestID IS NOT NULL
SELECT @sql = @sql + ' InterestID = @InterestID'
SELECT @sql = @sql + '; '
EXEC sp_executesql @sql, N'@InterestID INT, @Approval BIT', @InterestID, @Approval