Sql server 传递给子字符串函数的长度参数无效
对SQL和事务有点磨合。。。希望你们中的一些人能对这个问题有所帮助。(甚至可能修复我的html!这个网站支持不同语言的格式吗?Perl、SQL、Java?)这个服务器运行在SQLServer2005上,最近从SQLServer2000升级。我会全天关注这篇文章。干杯Sql server 传递给子字符串函数的长度参数无效,sql-server,database,stored-procedures,Sql Server,Database,Stored Procedures,对SQL和事务有点磨合。。。希望你们中的一些人能对这个问题有所帮助。(甚至可能修复我的html!这个网站支持不同语言的格式吗?Perl、SQL、Java?)这个服务器运行在SQLServer2005上,最近从SQLServer2000升级。我会全天关注这篇文章。干杯 ALTER PROCEDURE [dbo].[sp_AddRequest] -- Add the parameters for the stored procedure here @Message TEXT,
ALTER PROCEDURE [dbo].[sp_AddRequest]
-- Add the parameters for the stored procedure here
@Message TEXT,
@RequestId VARCHAR(20),
@StatusCode CHAR(1),
@StatusText VARCHAR(255),
@AddedDate DATETIME,
@MessageTimestamp DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Direction is incoming (i.e. Client -> WEBAPP)
DECLARE @Direction VARCHAR(50)
SET @Direction = 'Client -> WEBAPP'
-- Type is derived from:
-- a) MessageType Element value OR
-- b) Data Element first child OR
-- c) Root Element name
DECLARE @Type VARCHAR(50)
SELECT @Type = dbo.fnGetValue('MessageType', @Message)
IF @Type IS NULL SELECT @Type = dbo.fnGetFirstChild('Data', @Message)
IF @Type IS NULL SELECT @Type = dbo.fnGetFirstChild(NULL, @Message)
-- MessageStatus is retrieved from the lookup table
DECLARE @Status VARCHAR(50)
SELECT @Status = Description FROM MessageStatus WHERE MessageStatusCode = @StatusCode
-- Examine the Message root element
IF dbo.fnGetFirstChild(NULL, @Message) = 'RequestMessage'
BEGIN
-- Insert values into the Transaction table
INSERT INTO tblTransaction (RequestID, Direction, [Type], Status, StatusText, Sent, Received, Body)
VALUES (@RequestId, @Direction, @Type, @Status, @StatusText, @MessageTimestamp, @AddedDate, @Message)
RETURN @@IDENTITY
END
ELSE
BEGIN
-- Transaction is linked using the RequestId
DECLARE @TransactionID INT
SELECT @TransactionID = dbo.fnFindTransaction(@RequestId)
-- Insert values into the RelatedMessage table
INSERT INTO tblRelatedMessage (TransactionID, RequestID, Direction, [Type], Status, StatusText, Sent, Received, Body)
VALUES (@TransactionID, @RequestId, @Direction, @Type, @Status, @StatusText, @MessageTimestamp, @AddedDate, @Message)
RETURN @@IDENTITY
END
END
您好,您在这里缺少一个结束语(在WEBAPP之后): (我在清单中修复了它),但我找不到任何子字符串的引用。。。。。。。。到底是什么问题
Marc您的子字符串必须位于函数之一,例如fnGetValue或fnGetFirstChild 假设是,您可以通过将负数传递给length参数来生成相同的错误。传递NULL或'bob'或20亿或float:它要么有效,要么给出不同的错误
SELECT SUBSTRING ('ffggg', 1, -1)
Msg 536, Level 16, State 1, Line 1
Invalid length parameter passed to the substring function.
另一点:不要使用@标识。曾经使用SCOPE_IDENTITY()。我在这里看不到任何
子字符串
函数。另一个问题-不要在存储过程前面加上“sp”:来自2005年在线丛书(类似于2000年):“我们建议您不要使用sp_uu作为前缀创建任何存储过程。SQL Server使用sp_uu前缀指定系统存储过程。您选择的名称可能与将来的某些系统过程冲突。如果应用程序使用非模式限定名称引用,并且您自己的过程名称与系统过程名称冲突,则应用程序将中断,因为该名称绑定到系统过程,而不是您自己的过程。”
SELECT SUBSTRING ('ffggg', 1, -1)
Msg 536, Level 16, State 1, Line 1
Invalid length parameter passed to the substring function.