如何编写存储过程读取网页返回来的字符串

xzf_fancy 2011-01-15 02:12:30
访问这个网页 http://hq.sinajs.cn/list=sz000049 可以得到下面的字符串

var hq_str_sz000049="德赛电池,25.39,25.43,24.53,25.39,24.48,24.52,24.53,1668160,41382219.60,2000,24.52,5400,24.51,11400,24.50,1500,24.49,13314,24.48,7501,24.53,1000,24.54,8620,24.55,201,24.56,2890,24.58,2011-01-14,15:05:52";

我如何编写存储过程去gethttp得到这个字符串,并把它分组成数组,并写到我的数据库表里。
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
三断笛 2011-01-15
  • 打赏
  • 举报
回复
调用xmlhttp取数据.如下.

--首先创建split函数
Create FUNCTION [dbo].Split
(@SourceStr varchar(max),@Delimiter VARCHAR(20))--源字符串

RETURNS @table table(list varchar(2000) )
AS
BEGIN

SELECT @SourceStr=REPLACE(@SourceStr, @Delimiter,'$')
if charindex('$',@sourcestr)>0
begin
declare @i int
declare @n int
set @i=1
while charindex('$',@sourcestr,@i)>0
begin
set @n=charindex('$',@sourcestr,@i)
insert into @table values(substring(@sourcestr,@i, @n-@i) )
set @i=@n+1
end
insert into @table values(substring(@sourcestr,@i,len(@sourcestr)-@i+1))
end else insert into @table values(@sourcestr)

delete from @table where isnull(list,'') = ''
return
END

--再执行以下代码
DECLARE @hInstance INT,@ret INT,@hDOM INT,@hWEB INT,@hBody INT,@Text VARCHAR(2000),@err VARCHAR(200)
EXEC @ret=sp_oacreate 'MSXML2.XMLHTTP',@hInstance OUTPUT
EXEC @ret=sp_oamethod @hInstance,'open',NULL,'get','http://hq.sinajs.cn/list=sz000049','false'
EXEC @ret=sp_oamethod @hInstance,'send'
EXEC @ret=sp_oagetproperty @hInstance,'ResponseText',@text output
PRINT @ret
EXEC sp_oadestroy @hInstance
PRINT @text
SELECT * FROM [Split](@text,',') s


--输出
var hq_str_sz000049="德赛电池
25.39
25.43
24.53
25.39
24.48
24.52
24.53
1668160
41382219.60
2000
24.52
5400
24.51
11400
24.50
1500
24.49
13314
24.48
7501
24.53
1000
24.54
8620
24.55
201
24.56
2890
24.58
2011-01-14
15:06:02";
Shawn 2011-01-15
  • 打赏
  • 举报
回复
上面的有一个NVARCHAR写成VARCHAR了。正确的如下:
DECLARE @str NVARCHAR(4000)
SET @str = N'德赛电池,25.39,25.43,24.53,25.39,24.48,24.52,24.53,1668160,41382219.60,2000,24.52,5400,24.51,11400,24.50,1500,24.49,13314,24.48,7501,24.53,1000,24.54,8620,24.55,201,24.56,2890,24.58,2011-01-14,15:05:57'
EXEC insert_data_to_table @str

CREATE PROCEDURE insert_data_to_table
@str NVARCHAR(4000)
AS
begin
SET @str = @str + N','
DECLARE @sql NVARCHAR(4000)
SET @sql = N'SELECT '

WHILE(CHARINDEX(N',', @str) > 0)
BEGIN
DECLARE @temp NVARCHAR(4000)
SET @temp = SUBSTRING(@str,1, CHARINDEX(N',', @str)-1)

IF ISNUMERIC(@temp) = 1
SET @sql = @sql + @temp + N','
ELSE
SET @sql = @sql + N'''' +@temp + N''','

SET @str = STUFF(@str, 1, CHARINDEX(N',', @str), N'')
END

SET @sql = N'INSERT INTO table_name ' + SUBSTRING(@sql, 1, LEN(@sql)-1)
--PRINT @sql
EXEC (@sql)
END
Shawn 2011-01-15
  • 打赏
  • 举报
回复
DECLARE @str NVARCHAR(4000)
SET @str = '德赛电池,25.39,25.43,24.53,25.39,24.48,24.52,24.53,1668160,41382219.60,2000,24.52,5400,24.51,11400,24.50,1500,24.49,13314,24.48,7501,24.53,1000,24.54,8620,24.55,201,24.56,2890,24.58,2011-01-14,15:05:57'
EXEC insert_data_to_table @str

CREATE PROCEDURE insert_data_to_table
@str NVARCHAR(4000)
AS
begin
SET @str = @str + N','
DECLARE @sql NVARCHAR(4000)
SET @sql = N'SELECT '

WHILE(CHARINDEX(',', @str) > 0)
BEGIN
DECLARE @temp NVARCHAR(4000)
SET @temp = SUBSTRING(@str,1, CHARINDEX(N',', @str)-1)
IF ISNUMERIC(@temp) = 1
SET @sql = @sql + @temp + N','
ELSE
SET @sql = @sql + N'''' +@temp + N''','

SET @str = STUFF(@str, 1, CHARINDEX(',', @str), '')
END

SET @sql = N'INSERT INTO table_name ' + SUBSTRING(@sql, 1, LEN(@sql)-1)
--PRINT @sql
EXEC (@sql)
END
xzf_fancy 2011-01-15
  • 打赏
  • 举报
回复
求代码
叶子 2011-01-15
  • 打赏
  • 举报
回复
用C#或是VB在前台得到字符串,然后作为参数传给储存过程。
三断笛 2011-01-15
  • 打赏
  • 举报
回复
可以写COM,扩展存储过程,CLR函数从网页上取数据并返回数据库.

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧