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

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

创建分支表:

CREATE TABLE Branch    
(    
    bId int PRIMARY KEY,    
    bName varchar(20),    
    bCity varchar(20),    
    ifscCode varchar(15)    
)

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

CREATE PROCEDURE spName
AS    
    DECLARE @tableName VARCHAR(200), @Query VARCHAR(7000)

    SET @tableName = 'SELECT TOP 1 ifscCode FROM Branch ORDER BY bId DESC'

BEGIN    
    SET @Query = 'create table ' + @tableName + ' ( bId int, tokenDate date,
slot int, uToken int,username varchar(30),    
FOREIGN KEY (username) REFERENCES UserDetails(username),    
FOREIGN KEY (bId) REFERENCES Branch(bId)    
)'

    EXECUTE (@Query)
END

插入数据:

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

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

lf3rwulv

lf3rwulv1#

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

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

问题在于:

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

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

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

相关问题