MSSQL

花开花折 2014-05-07 07:58:36
各位:

1:怎样在MSSQL中创建一个以当前时间为数据库名及表名的文件 ,如:Create Table 表名 (id char,FullName char(10)) ;
怎样将表名改为当前时间,(自己试下了,只能创建固定名称的文件名,修改代码时报错)
代码如下

CREATE TABLE [dbo].[122](
[d] [nchar](10) NULL
) ON [PRIMARY]


无法将[122]更改为当前时间

2:自己主要写WINFORM应用程序,创建数据库文件后(主要是保存一些参数用)会将一些文件放入BIN\Debug\文件下,方便项目移植时,数据库文件也一起移植;怎样在读取数据库文件时以相对路径的文件读取,即读取文件的路径该怎样写,谢谢

3 都是些简单的问题,麻烦各位了。
...全文
270 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
花开花折 2014-05-09
  • 打赏
  • 举报
回复
各位,感谢大家的帮助,同时自己也查了下资料,自己想实现的功能终于实现了。谢谢、结贴。
YangYun 2014-05-08
  • 打赏
  • 举报
回复
但就怕那种技术不咋样,但又懂一点的领导呀。他自作聪明的认为那样做好,你有啥办法嘛
於黾 2014-05-08
  • 打赏
  • 举报
回复
就把领导当用户对待就好 用户只对自己使用上的问题提出需求,不要告诉我后台代码应该怎么编
於黾 2014-05-08
  • 打赏
  • 举报
回复
领导想法错了要说服领导改 不要领导说啥是啥 领导不懂技术,只懂需求,你实现他想要的效果就行了,不要连过程都听他的 否则你就算捣鼓出来一个东西,后期维护也还是你去维护,会相当麻烦
YangYun 2014-05-08
  • 打赏
  • 举报
回复
引用 19 楼 u010909114 的回复:
[quote=引用 18 楼 YangYun 的回复:] 对了,你的数据库不是sqlserver,是Access吧
A:我的数据库是mssql数据库, B:我想创建一个以当前时为数据库名及数据表的数据库文件,其中表是在当前数据库下的,谢谢。[/quote] 你的第二条,不会要建若干个数据库吧?每个数据库下只有一个为时间的数据表?没有这种应用法呀,真不知道你们的领导是怎么样的
YangYun 2014-05-08
  • 打赏
  • 举报
回复
你连接的是哪个数据库,生成的数据表当然就在那个数据库了啊,另外,你的那个[]方括号是可以取消的。 再说,我的建议早已经给你了,就是你在sqlserver数据库里建立一个存储过程,此存储过程的代码就是上面的那一些 Create procedure CreateTableByDate @CureentDate DateTime Begin declare @tname varchar(60) declare @sql varchar(200) set @tname = CONVERT(varchar(10),@CurrentDate,120) --也可以用@GetDate set @sql = 'create table ' + @tname + ' (id int ,name varchar(20) )' exec( @sql ) End 上面的就是存储过程的内容,然后你在你的C#源程序调用这个存储过程即可了,就可以获得新表”2014-5-8“
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 17 楼 YangYun 的回复:
我有个建议,既然上面的代码是正确的,那我建议在你的数据库里建立一个存储过程,参数嘛当然为当前时间,这样不就好吗
能否给点代码提示下,谢谢。
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 18 楼 YangYun 的回复:
对了,你的数据库不是sqlserver,是Access吧
A:我的数据库是mssql数据库, B:我想创建一个以当前时为数据库名及数据表的数据库文件,其中表是在当前数据库下的,谢谢。
YangYun 2014-05-08
  • 打赏
  • 举报
回复
对了,你的数据库不是sqlserver,是Access吧
YangYun 2014-05-08
  • 打赏
  • 举报
回复
我有个建议,既然上面的代码是正确的,那我建议在你的数据库里建立一个存储过程,参数嘛当然为当前时间,这样不就好吗
YangYun 2014-05-08
  • 打赏
  • 举报
回复
奇怪呢,我用你的源代码: declare @tname varchar(60) declare @sql varchar(200) set @tname = CONVERT(varchar(30),getdate() ,121) set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )' exec( @sql ) set @sql= 'select * from ['+ @tname + ']' exec(@sql) 在查询分析器里执行,是正确的呢,可以生成数据库表,只不过表名为:"2014-5-8 11:39:51 990"
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 14 楼 YangYun 的回复:
我也觉得你的这个方法不好,用时间来生成表,这样一来,数据库里岂不会出现很多个表,为啥不考虑放到一个表里呢? 比如你的表里准备存放这样几个字段:字段1,字段2,字段3。 你可以建立这个一张表:LogTest ID 时间,字段1,字段2,字段3 这样就可以用一张表将你每天的表包含进去了嘛,你读取时,就以时间为区别了吧
没办法,领导要求啊 求指点下,怎样用当前的时间创建数据库名及数据表名,谢谢
YangYun 2014-05-08
  • 打赏
  • 举报
回复
我也觉得你的这个方法不好,用时间来生成表,这样一来,数据库里岂不会出现很多个表,为啥不考虑放到一个表里呢? 比如你的表里准备存放这样几个字段:字段1,字段2,字段3。 你可以建立这个一张表:LogTest ID 时间,字段1,字段2,字段3 这样就可以用一张表将你每天的表包含进去了嘛,你读取时,就以时间为区别了吧
moonwrite 2014-05-08
  • 打赏
  • 举报
回复
也许是mssql的表名不能全数字 你可以试试用一个前缀比如 T20140508100605
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 11 楼 wmxcn2000 的回复:
整条 create table 语句,都是动态拼接出来的,不是

-- 这个,可以
set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )';
exec( @sql ) ;

--你的 ,这个,不可以
CREATE TABLE [dbo].[' + @tname + '](
    [d] [nchar](10) NULL
) ON [PRIMARY]

但如果我想创建在指定数据库中创建以当前时间命名的表格,怎么拼接呢?
卖水果的net 2014-05-08
  • 打赏
  • 举报
回复
整条 create table 语句,都是动态拼接出来的,不是

-- 这个,可以
set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )';
exec( @sql ) ;

--你的 ,这个,不可以
CREATE TABLE [dbo].[' + @tname + '](
    [d] [nchar](10) NULL
) ON [PRIMARY]

花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 9 楼 wmxcn2000 的回复:
[quote=引用 8 楼 u010909114 的回复:] [quote=引用 5 楼 wmxcn2000 的回复:] 以当前时间为表名,这个想法还真不多见,不过你可以动态的去拼这个表名称。在你的程序里,或SQL里都可以。
能给个例子不,自己主要对拼接格式不熟啊,老报错啊,谢谢[/quote]


declare @tname varchar(60) ;
declare @sql varchar(200) ;
set @tname = CONVERT(varchar(30),getdate() ,121) ;
print @tname 

set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )';
exec( @sql ) ;

set @sql= 'select * from ['+ @tname + ']';
print @sql ;
exec(@sql);
[/quote] 非常感谢,但有个问题是,不能创建在我指定的数据库中啊,还是我的代码有问题,代码如下:
declare @tname varchar(60) ;
declare @sql varchar(200) ;
set @tname = CONVERT(varchar(30),getdate() ,121) ;
print @tname 

set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )';
exec( @sql ) ;

set @sql= 'select * from ['+ @tname + ']';
print @sql ;
exec(@sql);


USE [1223]
GO

/****** Object:  Table [dbo].[ + @tname + ]    Script Date: 05/08/2014 09:01:30 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[' + @tname + '](
	[d] [nchar](10) NULL
) ON [PRIMARY]

GO
感谢在这句CREATE TABLE [dbo].[' + @tname + '] 格式不正确啊,老报错。请指点下。
卖水果的net 2014-05-08
  • 打赏
  • 举报
回复
引用 8 楼 u010909114 的回复:
[quote=引用 5 楼 wmxcn2000 的回复:] 以当前时间为表名,这个想法还真不多见,不过你可以动态的去拼这个表名称。在你的程序里,或SQL里都可以。
能给个例子不,自己主要对拼接格式不熟啊,老报错啊,谢谢[/quote]


declare @tname varchar(60) ;
declare @sql varchar(200) ;
set @tname = CONVERT(varchar(30),getdate() ,121) ;
print @tname 

set @sql = 'create table [' + @tname + '] (id int ,name varchar(20) )';
exec( @sql ) ;

set @sql= 'select * from ['+ @tname + ']';
print @sql ;
exec(@sql);
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:
以当前时间为表名,这个想法还真不多见,不过你可以动态的去拼这个表名称。在你的程序里,或SQL里都可以。
能给个例子不,自己主要对拼接格式不熟啊,老报错啊,谢谢
花开花折 2014-05-08
  • 打赏
  • 举报
回复
引用 6 楼 dogfish 的回复:
这样就会产生很多table,管理不是很好吧。
平均每天一个生成一个表。
加载更多回复(8)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧