【问题标题】:two table input parameters in stored procedure存储过程中的两个表输入参数
【发布时间】:2015-12-11 07:28:09
【问题描述】:

我正在开发 C# 项目,该项目需要一个将两个表名作为输入的存储过程。

第一个表会将数据复制到一个临时表,该表有两列 URLchannelID。然后将此URL 列与其他输入表的 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

我对@9​​87654325@了解不多,上面的代码有错误。

“>”附近的语法不正确。

消息 137,级别 15,状态 2,过程更新表,第 20 行
必须声明标量变量“@channelid”。

消息 137,级别 15,状态 2,过程更新表,第 22 行
必须声明标量变量“@channelid”。

请建议需要进行哪些更改

【问题讨论】:

  • 您不能直接参数化表名 - 您必须使用动态 SQL。我也不清楚为什么您将其作为单独的步骤执行,而不仅仅是执行UPDATE ts SET ... FROM ExcelTable t1 JOIN TableName t2 ON ...。 SQL 是一种基于集合的语言。不要将所有内容分解为过程代码。
  • 不使用加入,因为我没有任何列要加入....不知道我们是否可以使用like 子句加入

标签: tsql stored-procedures


【解决方案1】:

我没有方便的 MS SQL 服务器来测试它,但是您将变量声明为 @channel_Id,然后尝试将其用作 @channelid(不带下划线),因此您会收到有关未声明变量的错误。

【讨论】:

  • @dhruv...thanx 用于更正存储过程。我把'END'放在错误的位置。也忘了删除 > 0
【解决方案2】:

我已经更正了你的 SP,它应该是这样的

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)

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

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

   Delete #Temp 
   Where channelid = @channel_Id
End
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2015-01-25
    • 2021-07-19
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多