【问题标题】:How to select * from variable(Table) in IF statement in Stored Procedure如何在存储过程的IF语句中从变量(表)中选择*
【发布时间】:2021-07-01 09:54:23
【问题描述】:

我正在尝试从 IF 语句中可变的表中进行选择。这是我的问题。

--ItemProcedure (stored procedure name)
--Item (table name)
Itemcode ItemName    qty
--------------------------
item123  Monitor     100
item456  Laptop      50
item789  Keyboard    10
Exec ItemProcedure 'Item'
Declare @Msg as varchar(50)

IF Exists (Select * from @TableName where Itemcode = 'item123')
BEGIN
    SET @Msg = 'Item exists'
END

ELSE

BEGIN
    SET @Msg = 'Item not exists'
END

Select @Msg

有什么方法可以做到这一点吗?请指教。

【问题讨论】:

  • SELECT * FROM [table] 只是一个例子吗?因为将其作为存储过程在表现力或安全性方面没有任何增加;客户也可以自己提交该声明。这类事情需要动态 SQL,这在数据库端使用起来很不方便。
  • @jarlh 我正在使用 SQL Server。
  • 对不起,你的问题没有意义。您正在运行的实际代码是什么,您遇到的错误/问题是什么?要“从存储过程中的变量表中选择 *”,您完全按照您所写的:Select * from @TableName 您是否试图将存储过程输出捕获到表变量中?这是一个常见的问题。
  • 哦。你不能那样做。您需要使用动态 SQL stackoverflow.com/questions/2838490/a-table-name-as-a-variable
  • 这能回答你的问题吗? A table name as a variable

标签: sql sql-server stored-procedures


【解决方案1】:

如果您有两个表,ItemsA 和 ItemsB,您可以创建一个组合它们的视图:

CREATE VIEW vw_ItemsAll
AS
    SELECT ItemCode, ItemName, Qty, 'ItemsA' as TblName FROM ItemsA
    UNION ALL
    SELECT ItemCode, ItemName, Qty, 'ItemsB' as TblName FROM ItemsB
GO

SELECT ItemCode, ItemName, Qty
FROM vw_ItemsAll
WHERE TblName = @TableName

我已经这样做了,它似乎工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多