1

私はテーブルを持っていますbooks

+-------+-----------+------------+
| serial| book_name | book_author|
+-------+-----------+------------+
| 1     | Star Wars |     1      |
| 2     | Java      |     2      |
| 3     | Alimals   |     3      |
| 4     | Star Wars |     1      |
+-------+-----------+------------+

SELECT にストアド プロシージャを使用したい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。間違いは次のとおりです。

テーブルbooks.@tabは存在しません。

SELECT 条件の次のバリアントも使用しました。

SET @x = (SELECT 'col' FROM 'tab' WHERE b_id = 'cond');

同じ間違いですが、今はありません@:

テーブルbooks.tabが存在しません。

そのような場合に変数を正しく渡す方法は? 変数を表示するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

2

select とすべての変数を使用して文字列を作成し、次に Exec(string) を使用して select を実行します。

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
于 2012-05-17T11:39:36.303 に答える