存储过程中的两个表输入参数

时间:2015-12-11 07:28:10

标签: tsql stored-procedures

我正在研究C#项目,它需要一个存储过程,它将两个表名作为输入。

第一个表会将数据复制到临时表中,该临时表有两列URL& channelID。然后,此URL列与其他输入表的网址列&匹配。如果找到匹配,那么它将从临时表更新通道ID到其他表通道ID。

我已将存储过程编写为

CREATE PROCEDURE [dbo].[UpdateTables]
    @excelTable NVARCHAR(128) ,
    @TableName NVARCHAR(128) 
AS 
    Declare @channel_Id nvarchar(50)
    Declare @url varchar(400)
BEGIN
    Select * 
    Into #Temp 
    From QUOTENAME(@excelTable)
END 

While EXISTS(SELECT * From #Temp ) > 0
Begin
   Select Top 1 
       @channel_Id = channel_Id, @url = url  
   From #Temp

   update QUOTENAME(@TableName) 
   set channelid = @channelid 
   where pagefullurl like '%'+ @url + '%'

   Delete #Temp 
   Where channelid = @channelid
End

我对TSQL知之甚少,而且上面的代码有错误。

  

'>'附近的语法不正确。

     

Msg 137,Level 15,State 2,Procedure UpdateTables,Line 20
  必须声明标量变量“@channelid”。

     

Msg 137,Level 15,State 2,Procedure UpdateTables,Line 22
  必须声明标量变量“@channelid”。

请建议需要做哪些更改

2 个答案:

答案 0 :(得分:0)

我没有MS SQL服务器来测试它,但你将变量声明为Hashtable errorEntry = (Hashtable) hashtable.get("ERROR_2001"); Set set = errorEntry.keySet(); ,后来尝试将其用作@channel_Id(没有下划线),这样你就会得到错误未申报的变量。

答案 1 :(得分:0)

我已经纠正了您的SP,这就是它的外观

{{1}}