依據表名和索引獲得須要的列名的存儲進程。本站提示廣大學習愛好者:(依據表名和索引獲得須要的列名的存儲進程)文章只能為提供參考,不一定能成為您想要的結果。以下是依據表名和索引獲得須要的列名的存儲進程正文
create proc p_sword_getblcolumn
(
@tblName varchar(200),
@fromIndex int,
@toIndex int,
@columnName varchar(3000) output
)
as
begin
declare @tempColumn varchar(3000)
declare @errMsg varchar(200)
declare @i int
set @i=1
set @columnName=''
set @errMsg=''
declare tempColumnCur cursor for
select syscolumns.name from syscolumns join sysobjects on syscolumns.id = sysobjects.id
where sysobjects.name =@tblName order by syscolumns.colorder
open tempColumnCur
fetch next from tempColumnCur into @tempColumn
while @@FETCH_STATUS=0
begin
if(@fromIndex=0 and @toIndex=0)
begin
set @columnName=@columnName+','+@tempColumn
end
if(@fromIndex=0 and @toIndex<>0)
begin
if(@i<=@toIndex)
set @columnName=@columnName+','+@tempColumn
end
else if(@fromIndex <>0 and @toIndex=0)
begin
if(@i>=@fromIndex)
set @columnName=@columnName+','+@tempColumn
end
else if(@i>=@fromIndex and @i<=@toIndex)
begin
set @columnName=@columnName+','+@tempColumn
end
set @i=@i+1
print @i
fetch next from tempColumnCur into @tempColumn
end
close tempColumnCur
deallocate tempColumnCur
set @columnName=SUBSTRING(@columnName,2,len(@columnName))
print @columnName
if(@@ERROR<>0)
begin
set @errMsg='get column error '
goto errorproc
end
else
return 0
end
errorproc:
begin
raiserror(@errMsg,16,1)
return 1
end
go
個中觸及到了raiserror函數
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]
參數解釋:
第一個參數:{ msg_id | msg_str | @local_variable }
msg_id:表現可所以一個sys.messages表中界說的新聞代號;
應用 sp_addmessage 存儲在 sys.messages 目次視圖中的用戶界說毛病新聞號。
用戶界說毛病新聞的毛病號應該年夜於 50000。
msg_str:表現也能夠是一個用戶界說新聞,該毛病新聞最長可以有 2047 個字符;
(假如是常量,請應用N'xxxx',由於是nvarchar的)
當指定 msg_str 時,RAISERROR 將激發一個毛病號為 5000 的毛病新聞。
@local_variable:表現也能夠是依照 msg_str 方法的格局化字符串變量。
第二個參數:severity
用戶界說的與該新聞聯系關系的嚴重級別。(這個很主要)
任何用戶都可以指定 0 到 18 之間的嚴重級別。
[0,10]的閉區間內,不會跳到catch;
假如是[11,19],則跳到catch;
假如[20,無限),則直接終止數據庫銜接;
第三個參數:state
假如在多個地位激發雷同的用戶界說毛病,
則針對每一個地位應用獨一的狀況號有助於找到激發毛病的代碼段。
介於 1 至 127 之間的隨意率性整數。(state 默許值為1)
當state 值為 0 或年夜於 127 時會生成毛病!
第四個參數:argument
用於取代 msg_str 或對應於 msg_id 的新聞中的界說的變量的參數。
第五個參數:option
毛病的自界說選項,可所以下表中的任一值:
LOG :在毛病日記和運用法式日記中記載毛病;
NOWAIT:將新聞立刻發送給客戶端;
SETERROR:將 @@ERROR 值和 ERROR_NUMBER 值設置為 msg_id 或 50000;