我有一张 table books
。
+-------+-----------+------------+
| serial| book_name | book_author|
+-------+-----------+------------+
| 1 | Star Wars | 1 |
| 2 | Java | 2 |
| 3 | Alimals | 3 |
| 4 | Star Wars | 1 |
+-------+-----------+------------+
我想使用存储过程来选择 book_name
;
我的存储过程是这样的:
USE books;
DELIMITER //
CREATE PROCEDURE doselect(col VARCHAR(50), tab VARCHAR(50), cond INT(5))
BEGIN
SET @x = NULL;
SET @col = col;
SET @tab = tab;
SET @cond = cond;
SET @x = (SELECT @col FROM @tab WHERE b_id = @cond);
END //
DELIMITER ;
然后我称它为:
CALL doselect('book_name', 'books', 3)
但是 id 不起作用。它看不到变量 @tab
。错误是:
Table books.@tab doesn't exists.
我还使用了这种 SELECT 条件的变体:
SET @x = (SELECT 'col' FROM 'tab' WHERE b_id = 'cond');
同样的错误,但现在没有@
:
Table books.tab doesn't exists.
在这种情况下如何正确传递变量?如何让它看到我的变量?
谢谢。
最佳答案
使用您的选择和所有变量构建字符串,然后 Exec(string) 运行您的选择。
CREATE PROCEDURE spName
@Var VARCHAR(50)
AS
SET NOCOUNT ON;
DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT
X, Y + '' - '' + Z as ''Some alias''
FROM ' + @Var + '..TableName '
exec (@sql)
GO
关于mysql - 如何将变量传递给存储过程的主体语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634919/