我有以下存儲過程,它以每個輸入完整文件路徑字符串的字節爲單位返回文件大小。使用調用一個存儲過程調用另一個TSQL更新表
我想編寫另一個包裝存儲過程或函數來更新一個有兩列的表。 Full_Path列(下面的存儲過程的輸入)和列大小(應由下面的過程的輸出更新)。基本上我想使用下面的過程更新每個文件的大小列(在完整路徑列中指定)。
我不知道該怎麼做。請指教。
Create proc sp_get_file_size (@fileName varchar(200))
as
begin
declare @ntcmd varchar(200)
declare @detailLine varchar(200)
declare @pos1 int
declare @pos2 int
declare @size int
set nocount on
Create table #res (line varchar(400))
set @ntcmd = 'dir /-C ' + @fileName
insert #res exec xp_CmdShell @ntcmd
select @detailLine = line
from #res where rtrim(ltrim(line)) like '%bytes'
-- if detail Line is null - return -1
if isnull (@detailLine ,'*') = '*' return -1
-- get position of words bytes and File(s)
set @pos1 = charindex ('bytes' ,lower(@detailLine))
set @pos2 = charindex ('(s)' , lower(@detailLine))
-- extract the size value from the details Line
set @size = convert (int, rtrim(ltrim(
substring (@detailLine , @pos2+3,@pos1 - @pos2 - 4))))
return (@size)
set nocount off
end
go
注意:你不應該**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –