[英]How to create stored procedure to calculate beginning stock, stock in, stock out, stock balance in SQL Server 2005
[英]Create SQL Server stored procedure with stock data
我試圖將我從SQL Server獲得的一些代碼轉換為具有可以傳遞的參數的存儲過程,但是我不確定如何執行此操作。 我希望URL的4個字母的股票符號是一個變量,以便我可以傳遞不同的符號,我還需要將此代碼用作存儲過程。
GOOG
是我需要變量的地方。
http://finance.yahoo.com/webservice/v1/symbols/GOOG/quote '
--RSS FEED
DECLARE @docHandle INT;
DECLARE @xmlData XML;
DECLARE @URL NVARCHAR(255);
DECLARE @file NVARCHAR(255);
DECLARE @cmd NVARCHAR(255);
DECLARE @sql NVARCHAR(255);
DECLARE @tXML TABLE(data XML);
SET @URL = 'http://finance.yahoo.com/webservice/v1/symbols/GLUU/quote';
SET @file = 'c:\temp\quotes.xml';
-- Downloading the data
SET @cmd = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell (new-object System.Net.WebClient).DownloadFile( ''' + @URL + ''',''' + @file + ''' )'
EXEC master.dbo.xp_cmdshell @cmd, no_output
-- Loading the Downloaded File into the XML variable
SET @sql = 'SELECT BulkColumn FROM OPENROWSET( BULK ''' + @file + ''', SINGLE_BLOB ) AS a'
INSERT @tXML EXEC(@sql);
SELECT @xmlData = data from @tXML
-- Preparing the Relational Table from the XML variable
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlData;
INSERT INTO tblstockdata ([Name], [Price], [Symbol], [TS], [Type], [Volume])
SELECT * FROM OPENXML(@docHandle, N'//list/resources/resource')
WITH ( Name VARCHAR(10) 'field[@name="name"]',
Price VARCHAR(10) 'field[@name="price"]',
Symbol VARCHAR(10) 'field[@name="symbol"]',
TS VARCHAR(10) 'field[@name="ts"]',
Type VARCHAR(10) 'field[@name="type"]',
Volume VARCHAR(10) 'field[@name="volume"]');
EXEC sp_xml_removedocument @docHandle;
謝謝!
:)
您擁有有效的SQL,這是困難的部分。 現在將您的工作SQL與
CREATE PROCEDURE <schema>.<Name>(
@param <type>
) as begin
和
end
而且你應該很好走。 對於初學者,可以將dbo
用作<schema>
的值,直到需要使用非默認架構為止。 建議不要為過程名稱使用前綴“ sp”或“ xp”,因為這些名稱用於識別SQL Server的系統過程和擴展過程。
如果需要其他參數,可以使用逗號將它們添加到參數列表中。
下面是從您的代碼中收集的存儲過程示例,該示例采用了所需的symbol參數。 在這里,我使用XML數據類型方法而不是sp_xml_preparedocument。 如果多個用戶可能同時調用此存儲過程,建議您為該文件生成一個唯一名稱,然后再刪除。 您可能會考慮使用CLR存儲過程來避免臨時文件和OPENROWSET丑陋。
CREATE PROC dbo.usp_GetEquityQuote
@symbol varchar(10)
AS
DECLARE @URL NVARCHAR(255);
DECLARE @file NVARCHAR(255);
DECLARE @cmd NVARCHAR(255);
DECLARE @sql NVARCHAR(255);
DECLARE @tXML TABLE(data XML);
SET @URL = 'http://finance.yahoo.com/webservice/v1/symbols/' + @symbol + '/quote';
SET @file = 'c:\temp\quotes.xml';
-- Downloading the data
SET @cmd = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell (new-object System.Net.WebClient).DownloadFile( ''' + @URL + ''',''' + @file + ''' )';
EXEC master.dbo.xp_cmdshell @cmd, no_output;
-- Loading the Downloaded File into the XML variable
SET @sql = 'SELECT BulkColumn FROM OPENROWSET( BULK ''' + @file + ''', SINGLE_BLOB ) AS a';
INSERT @tXML EXEC(@sql);
SELECT data from @tXML ;
SELECT
resources.resource.value('field[@name="name"][1]', 'varchar(10)') AS name
,resources.resource.value('field[@name="price"][1]', 'decimal(18,4)') AS price
,resources.resource.value('field[@name="symbol"][1]', 'varchar(10)') AS symbol
,resources.resource.value('field[@name="ts"][1]', 'bigint') AS ts
,resources.resource.value('field[@name="type"][1]', 'varchar(10)') AS type
,resources.resource.value('field[@name="volume"][1]', 'bigint') AS volume
FROM (SELECT data FROM @tXML) AS tXML(data)
CROSS APPLY data.nodes('/list/resources/resource') AS resources(resource);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.