如何使用可变参数构造Web服务的URL

时间:2018-11-22 22:10:24

标签: sql sql-server tsql

我有一个有效的脚本。我想把它变成一个过程,所以我可以从应用程序中调用该过程。但是,我在脚本中有2个参数,这些参数构成了用于调用Web服务的URL的一部分。所述脚本如下。

我的应用程序会将两个参数传递给URL,即日期和html.Div( [ html.Div([ html.Div([ html.H1(children='PERFORMANCE REPORT AUGUST', style={ 'color':'#36A9DE' }, className='nine columns'), html.Img( src="https://media.go2speed.org/brand/files/sevengames/804/asdpree.png", className='three columns', style={ 'height': '12%', 'width': '12%', 'float': 'right', 'position': 'relative', 'padding-top': 0, 'padding-right': 0 }, ), html.Div(children='''*Created using Plotly Dash Python framework''', className='nine columns' ) ], className="row" ) ]), html.Div([ html.Div([ dcc.Graph( id='example-graph' )], className='six columns' ) ], className='row' ) ] ) 。两者在脚本中均以粗体斜体突出显示。是的,脚本将从相关应用程序的JSON输出中返回正确的值。因此,一切都按原样进行。

现在,我想将其创建为从我的应用程序(PowerApps应用程序)调用的过程,但是将日期和Staff.ID都传递给该过程。我曾尝试通过使用声明语句和参数来构造URL,但是没有用。

脚本:

Staff.ID

1 个答案:

答案 0 :(得分:0)

我假设您的查询所有工作正常,并且将其封装在SP中:

create procedure dbo.MyProcedureName
(
  @Date date
  , @StaffId int
)
as
begin
  DECLARE @response NVARCHAR(max), @Url varchar(max);

  set @Url = 'https://powercomm.simprosuite.com/api/v1.0/companies/1/schedules/?access.token=383abc4084a2b8dcbf508252e4a0313762fd623b&Date=' + convert(varchar(10), @Date, 23) + '&Staff.ID=' + convert(varchar(38),@StaffId);

  --get the data from the provider as JSON
  EXECUTE dbo.GetWebService @Url, @response OUTPUT;

  --insert into Schedules (SchedID, Type, JobNo, TotalHrs, EmployeeID, SchedDate, StartTime, FinishTime)
    select SchedID, Type, JobNo, TotalHrs, EmployeeID, SchedDate, StartTime, FinishTime
    FROM OpenJson(@response);
    with (SchedID numeric N'$.ID', Type CHAR(15) N'$.Type', JobNo nvarchar(5) N'$.Reference', TotalHrs Dec(4,2) N'$.TotalHours', SchedDate Date N'$.Date',  EmployeeID numeric(6) N'$.Staff.ID', Blocks nvarchar(max) N'$.Blocks' as JSON)
    OUTER APPLY OpenJson(Blocks)
    WITH (StartTime datetimeoffset N'$.ISO8601StartTime', FinishTime datetimeoffset N'$.ISO8601EndTime' );
END
go