每次在分支表中插入数据时,我都要创建一个表但是名称应该来自分支表ifsccode列

mu0hgdu0  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(331)

创建分支表:

  1. CREATE TABLE Branch
  2. (
  3. bId int PRIMARY KEY,
  4. bName varchar(20),
  5. bCity varchar(20),
  6. ifscCode varchar(15)
  7. )

这样就可以创建一个具有动态表名的表。表名是的最后一个插入值 ifsccode 在分支表中插入的列。所以每次数据插入 Branch table,另一张table ifscCode 应创建名称:

  1. CREATE PROCEDURE spName
  2. AS
  3. DECLARE @tableName VARCHAR(200), @Query VARCHAR(7000)
  4. SET @tableName = 'SELECT TOP 1 ifscCode FROM Branch ORDER BY bId DESC'
  5. BEGIN
  6. SET @Query = 'create table ' + @tableName + ' ( bId int, tokenDate date,
  7. slot int, uToken int,username varchar(30),
  8. FOREIGN KEY (username) REFERENCES UserDetails(username),
  9. FOREIGN KEY (bId) REFERENCES Branch(bId)
  10. )'
  11. EXECUTE (@Query)
  12. END

插入数据:

  1. INSERT INTO Branch
  2. VALUES (1, 'Bandra', 'Mumbai', 'BOI650011')

错误:
消息156,15级,状态1,行1
关键字“select”附近的语法不正确。
消息102,级别15,状态1,行1
“bid”附近的语法不正确

lf3rwulv

lf3rwulv1#

将表名存储在列中通常是个坏主意。我对这件事的总体看法是,如果你这么做了,你应该对sql有很强的理解,这样的问题就永远不会发生。
在任何情况下,如果您打印出sql,您都会立即看到您的问题。它看起来像这样:

  1. 'CREATE TABLE SELECT TOP 1 ifscCode FROM Branch ORDER BY bId DESC . . . '

问题在于:

  1. set @tableName = 'SELECT TOP 1 ifscCode FROM Branch ORDER BY bId DESC';

您正在设置 @tableName 一根绳子。您需要实际值:

  1. set @tableName = (SELECT TOP 1 ifscCode FROM Branch ORDER BY bId DESC);

相关问题