sql语言建表问题

shanzhaikaifa 2009-09-10 11:23:10
请教高手,如果我想在指定数据库下用sql语句(C#代码拼出来的)创建个表,如果此表存在,则将此表的结构改成新表的结构比如:我创建个新表a,同时此库中存在表a但是结构不同,少个字段 或多个字段 或通字段数据类型有变化等,执行此建表的sql语言后,会在旧表a的基础上 按照建新表a的sql语句进行修改 而不是删除a后重建新a 问题是:如何写SQL语句能够达到这样的要求?

创建表a——》库中表 —存在—》修改旧表为新表结构

|
不存在
|
新建表
...全文
173 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
alonso_hu 2009-09-18
  • 打赏
  • 举报
回复
热心人不少。。。。。。。欢喜的狠。。。up
mole_lipo 2009-09-16
  • 打赏
  • 举报
回复
呵呵~~ 同意10楼的看法,很准确
SimpleM 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shanzhaikaifa 的回复:]
我的意思是说如何用sql语句让他自动去比对差异 然后更改 不是事先知道差异 然后在拼sql去更改
[/Quote]

事实上,你不用创建新表啊,你只要找到原先有的那张表,按照10楼给出的代码修改就好了啊,效果和你说的不是一样的吗?
SimpleM 2009-09-15
  • 打赏
  • 举报
回复
10楼解释得最通俗
我顺便把文字带上
boject_id('tb') is not null --如果这个表名存在
alter(修改) table(表) tb(表名) alter(修改) colimn(列) col(列名) nvarchar(20)(数据类型)
else
否则创建表并创建列

IF OBJECT_ID('tb') IS NOT NULL
ALTER TABLE tb ALTER COLUMN col NVARCHAR(20)
ELSE
CREATE TABLE TB(col NVARCHAR(20))
guguda2008 2009-09-12
  • 打赏
  • 举报
回复
这个东西可以这么实现:
1.先建临时表#TEMPTABLE,列为想要加的所有列
2.
SELECT * FROM TEMPDB..SYSCOLUMNS WHERE ID=OBJECT_ID('TEMPDB..#TEMPTABLE')

SELECT * FROM SYSCOLUMNS WHERE ID=OBJECT_ID('TB')
进行对比,选出不除表名外不两同的列
3.
根据结果集进行动态ALTER TABLE语句的拼接,完工吃饭

如果还不明白我再写语句。
david0927cs2006 2009-09-12
  • 打赏
  • 举报
回复
关注,学习下
starfly578 2009-09-12
  • 打赏
  • 举报
回复
期待高手,
如何比对两表结构
htl258_Tony 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 shanzhaikaifa 的回复:]
请教高手,如果我想在指定数据库下用sql语句(C#代码拼出来的)创建个表,如果此表存在,则将此表的结构改成新表的结构比如:我创建个新表a,同时此库中存在表a但是结构不同,少个字段 或多个字段 或通字段数据类型有变化等,执行此建表的sql语言后,会在旧表a的基础上 按照建新表a的sql语句进行修改 而不是删除a后重建新a  问题是:如何写SQL语句能够达到这样的要求?

创建表a——》库中表    —存在—》修改旧表为新表结构
                           
                              |
                          不存在   
                              |
                          新建表
[/Quote]

IF OBJECT_ID('tb') IS NOT NULL 
ALTER TABLE tb ALTER COLUMN col NVARCHAR(20)
ELSE
CREATE TABLE TB(col NVARCHAR(20))
ChinaJiaBing 2009-09-11
  • 打赏
  • 举报
回复

if object_id('表') is not null
alter table 表..
if object_id('表') is null
create table 表

ChinaJiaBing 2009-09-11
  • 打赏
  • 举报
回复

if object_id('表') is not null
drop table 表
shanzhaikaifa 2009-09-11
  • 打赏
  • 举报
回复
我的意思是说如何用sql语句让他自动去比对差异 然后更改 不是事先知道差异 然后在拼sql去更改
soft_wsx 2009-09-11
  • 打赏
  • 举报
回复
哥哥!~可以通过dbo.sysobjects表判断指定表是否存在
然后通过dbo.syscolumns表判断指定表的指定列是否存在!代码就不写了!很简单的

shanzhaikaifa 2009-09-11
  • 打赏
  • 举报
回复
顶顶 等高手帮忙
黄_瓜 2009-09-10
  • 打赏
  • 举报
回复
if exists ( SELECT * FROM sys.objects WHERE [object_id] = OBJECT_ID('tb') AND type='u')
begin
alter table tb......
end
else
begin
create table tb......
end
shanzhaikaifa 2009-09-10
  • 打赏
  • 举报
回复
是这样的 最近在参与个平台,其中一个功能是在平台上设置好字段 数据类型等候生成C#建表字符串 然后执行,但是要求是 在建新表前的判断 不是删除重名的旧表,而是要按新表结构修改重名的旧表 包括 数据类型 新字段等异样的地方 若没有重名的旧表 则新建。
虫洞 2009-09-10
  • 打赏
  • 举报
回复

if object_id('tableName') is null
create table tableName(id int)
else if object_id('tableName') not is null
alter table ---
go
--小F-- 2009-09-10
  • 打赏
  • 举报
回复
估计得用触发器
--小F-- 2009-09-10
  • 打赏
  • 举报
回复
帮顶
bancxc 2009-09-10
  • 打赏
  • 举报
回复
问题是 你还得判断你需要的列是否存在 类型是否正确
bancxc 2009-09-10
  • 打赏
  • 举报
回复

if object_id('tableName') is null
create table tableName(id int)
go

等高手

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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