如何在存储过程的IF语句中从变量(表)中选择*
Posted
技术标签:
【中文标题】如何在存储过程的IF语句中从变量(表)中选择*【英文标题】:How to select * from variable(Table) in IF statement in Stored Procedure 【发布时间】: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 ***.com/questions/2838490/a-table-name-as-a-variable
这能回答你的问题吗? A table name as a variable
【参考方案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
我已经这样做了,它似乎工作得很好。
【讨论】:
以上是关于如何在存储过程的IF语句中从变量(表)中选择*的主要内容,如果未能解决你的问题,请参考以下文章