怎样在建表时,以表名作参数(100分)

  • 主题发起人 主题发起人 ice-sword
  • 开始时间 开始时间
I

ice-sword

Unregistered / Unconfirmed
GUEST, unregistred user!
如我在三层结构的应用服务器上的ADOQUERY的sql中写
create table :tablename
(
table_id integer not null
....
)
在客户端的clientdataset1的commadtext中写
clientdataset1.close;
clinetdataset1.parambyname(tablename):=edit1.text;
clientdataset1.open;
目的是将企业逻辑放在应用服务器上,但在使用:tablename做参数时程序报错
请那位大虾指点一下,
 
试下文件类的能不能就知道了
 
SORRY
能否说详细些,“文件类的”是什么意思,我是菜鸟不大懂的
 
表名好像不能作参数吧。
 
在程序员大本营里看到有人使用这样的代码实现把表名当成参数传给存储过程的问题
create proc NewTable @tablename varchar(20)
as
exec("select * Into" + @tablename + "from SourceName")
好象是使用动态SQL,但是我对动态SQL的概念还不大懂,所以不知其所以然,但表名
应当是可以做参数的,请大虾们,不吝赐教小生这厢有礼了
 
在Delphi的数据库的操作中可以用param
如:
Select * from db1
where strName=:para
那么para就是一个param
使用的方法如下
Query1.parambyName(param).asstring := edit1.text ;
 
????????????
怎么都不说正题呢?-->如何将表名定义为参数
 
赞同ice-sword
 
1。
建议您把SQL语句作为字符串,表名处用%s代替
Format(SQL语句,[表名])
格式化SQL语句
在写入到Query中
执行Query完成操作。
2.
在数据库中写个过程,表名作为参数传入


 
据我所知,大多数数据库的存储过程都不能用数据库表名作为参数.
1.可以折衷一下,如:
create procedure AddTable
TableName varchar(30)
begin
exec('create table ado.[' + @TableName + '] (ID int, name varchar(10))');
end;
2.用程序的代码来建立动态sql语句:
MyTableName := 'Test'
query1.SQL.Add(Format('create table ado.[%s]', [MyTableName]));
query1.SQL.Add('(ID int, name varchar(10))');
query1.ExecSQL;
 
:devuser,pxie
我原来使用的方法是
clientdataset.close;
clientdataset1.commandtext:='create table'+edit1.text +'(' +
' [Id] [varchar] (12) NULL +')';
clientdataset.execsql;
方法与-->>"把SQL语句作为字符串,表名处用%s代替"应当是相同的,
现在想用
在应用服务器的query1的SQL中写入'create table :param1 edit1.text( [Id] [varchar] (12) NULL )'
在客户端写入
clientdataset1.close;
clientdataset1.parambyname(param1)=edit1.text;
clientdataset1.execsql;
所以想引入表名做参数,不可以用变量代替
:pxie
<font color='red'>
create procedure AddTable
TableName varchar(30)
begin
exec('create table ado.[' + @TableName + '] (ID int, name varchar(10))');
end;
<font color='black'>
应当写在什么地方,程序中还是写在query的sql属性中,可以详细些吗,我两处都
试过都报错!!

 
create procedure AddTable
TableName varchar(30)
begin
exec('create table ado.[' + @TableName + '] (ID int, name varchar(10))');
end;
写在数据库中作为存储过程,调用storeproc 控件执行

 
实际上
declare @TableName varchar(30)
set @tablename='table1'
select * from @TableName
在sql 运行时会翻译为
select * from 'table1'
而正常可以运行语句为
select * from table
也就是说当将表名或者column定义为varchar形式时在sql翻译后都会在字段名上
加一对‘’----单引号从而与sql定义的格式不符。
报错-“Incorrect syntax near 'table1'”
解决这一问题的方法是消除变量中的引号
上面的各种方法实际上都是基于这一目的

create procedure hi_sp (@_id varchar(10)) as
declare
@SQLstmt varchar(1000)
begin
@SQLstmt='select * form '+@_id
exec(@SQLstmt)

exec ('select * from ' + @TableName)(好像少了一些东西所以运行不了)
当然方法有很多我自己使用的一个方法是
declare @tablename sysname, @sqll sysname
set @tablename='causer'
set @sqll='select * from '+@tablename
EXECUTE sp_executesql @sqll
如果要在程序中调用参数可以
declare @tablename sysname, @sqll sysname
set @tablename=:tablename
set @sqll='select * from '+@tablename
EXECUTE sp_executesql @sqll
设置tablename的形式为ftstring
然后再程序中直接调用就可以了。
 
对于建表也是同样的道理
declare @tablename sysname, @sqll sysname
set @tablename='causer3'
set @sqll='create table '+@tablename+'(rr varchar(500))'
EXECUTE sp_executesql @sqll
可以实现动态建表
 
多人接受答案了。
 
后退
顶部