Cần trợ giúp với thủ tục SQL Server 2000 này. Vấn đề được thực hiện khó khăn bởi vì tôi đang thử nghiệm thủ tục thông qua Oracle SQL Developer.Lỗi SQL: Cú pháp không đúng gần từ khóa 'Kết thúc'
Tôi đang chạy quy trình để lặp cột với chuỗi số mới trong định dạng Varchar cho những người có giá trị null.
Nhưng tôi tiếp tục nhận được lỗi, vì vậy a) Tôi có thể đã làm sai phương pháp tiếp cận b) cú pháp không đúng do phiên bản được sử dụng. Tôi chủ yếu là người dùng Oracle.
Lỗi tôi tiếp tục nhận được: SQL Error: Incorrect syntax near the keyword 'End'.
không đủ hữu ích để khắc phục sự cố. Các End
đề cập đến 'cuối cùng' cuối cùng trong thủ tục.
Mọi trợ giúp sẽ được đánh giá cao.
Đây là Quy trình.
ALTER PROCEDURE [dbo].[OF_AUTOSEQUENCE] @JvarTable Varchar(250), @varColumn Varchar(250), @optIsString char(1), @optInterval int AS
/*
Procedure OF_AUTOSEQUENCE
Created by Joshua [Surname omitted]
When 20100902
Purpose To fill up column with new sequence numbers
Arguments varTable - Table name
varColumn - Column name
optIsString - Option: is it string or numeric, either use T(rue) or F(alse)
optInterval - Steps in increment in building new sequence (Should be 1 (one))
Example script to begin procedure
EXECUTE [dbo].[OF_AUTOSEQUENCE] 'dbo.EH_BrownBin', 'Match', 'T', 1
Any questions about this, please send email to
[business email omitted]
*/
declare
@topseed int,
@stg_topseed varchar(100),
@Sql_string nvarchar(4000),
@myERROR int,
@myRowCount int
set @Sql_string = 'Declare MyCur CURSOR FOR select ' + @varColumn + ' from ' + @JvarTable + ' where ' + @varColumn + ' is null'
Exec sp_executesql @Sql_string
SET NOCOUNT ON
Begin
if @optIsString = 'T'
Begin
set @Sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by convert(int, ' + @varColumn + ') desc'
set @stg_topseed = @Sql_string
set @topseed = convert(int, @stg_topseed)
ENd
else
Begin
set @Sql_string = 'select top 1 ' + @varColumn + ' from ' + @JvarTable + ' order by ' + @varColumn + ' desc'
set @topseed = @Sql_string
ENd
-- SELECT @myERROR = @@ERROR, @myRowCOUNT = @@ROWCOUNT
-- IF @myERROR != 0 GOTO HANDLE_ERROR
open MyCur
fetch next from MyCur
WHILE @@FETCH_STATUS = 0
set @topseed = @topseed + @optInterval
if @optIsString = 'T'
begin
set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = cast((' + @topseed + ') as char) where current of ' + MyCur
exec (@Sql_string)
ENd
else
begin
set @Sql_string = 'update ' + @JvarTable + ' set ' + @varColumn + ' = ' + @topseed + ' where current of ' + MyCur
exec (@Sql_string)
ENd
fetch next from MyCur
ENd
-- SELECT @myERROR = @@ERROR, @myRowCOUNT = @@ROWCOUNT
-- IF @myERROR != 0 GOTO HANDLE_ERROR
--HANDLE_ERROR:
--print @myERROR
CLOSE MyCur
DEALLOCATE MyCur
End
Vâng đốm. Bây giờ tôi có một lỗi khác.
SQL Error: Invalid column name 'MyCur'.
. Có lẽ cách tiếp cận của tôi là sai. – Joshuabạn cần phải 'TIẾP TỤC TIẾP TỤC TỪ MyCur INTO @ a'. vì vậy, bạn phải khai báo một biến cục bộ @a trước đó và sau đó thay đổi ... '+ 'trong đó hiện tại của' + MyCur' thành ...' + 'ở vị trí hiện tại của' + @ a' –