SQL, 表删除

zhouixi 2012-03-07 04:40:57


select name from sysobjects where xtype='U' AND year(refdate)<2012
例如我要删除,多个表,建表时间小于2012年的。

咋 个删除哦,
...全文
474 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouixi 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 szstephenzhou 的回复:]
就是动态的删除下面的表 。要批量的删除这些表的话就要用 , 隔开 所以要拼接个 , 出来隔开
不知道你明白了没有
[/Quote]

哈哈,阿蒙哥你是没有说,引号的作用哦,麻烦解释一下。 还有,它是如何显示成一个个表名,而不是查询出来一个字段,是豆句的原因吗? 后面的,from sys.tables where create_date <2012-02-12 为何对打印的语句不影响。
我的意思是说,为何对变量赋值的时候,它为何只拼接前面的,@sql+'['+name']', 而后面的from... 却没连接。当然,要的就是它不联接。 劳烦了。哈哈,

勿勿 2012-03-13
  • 打赏
  • 举报
回复
就是动态的删除下面的表 。要批量的删除这些表的话就要用 , 隔开 所以要拼接个 , 出来隔开
不知道你明白了没有
zhouixi 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 szstephenzhou 的回复:]
就是把name这列值动态拼接起来的意思。我也不知道怎么解释。实在不明白还的你自己体会多看下经典的动态行列转换 http://blog.csdn.net/szstephenzhou/article/details/7091819
[/Quote]

OMG 还是阿蒙哥,热心阿。哈哈,结贴。
黄_瓜 2012-03-13
  • 打赏
  • 举报
回复
omg,该结贴了吧。。。。。。。。。
勿勿 2012-03-13
  • 打赏
  • 举报
回复
就是把name这列值动态拼接起来的意思。我也不知道怎么解释。实在不明白还的你自己体会多看下经典的动态行列转换 http://blog.csdn.net/szstephenzhou/article/details/7091819
zhouixi 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 szstephenzhou 的回复:]
稍微修改了下UU的

SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)
EXEC(@SQL)
[/Quote]



DROP TABLE [avc], [geography], [tb_stuxs03], [sasa], [tb_stu04], [internet_sales], [tb_te04], [tb_stumark08], [kk], [tb_book04], [kdkdk], [tb_tb04], [diff], [bb], [tb_astuinfo08], [tb_student05], [isi], [store_information], [sd], [customer], [oreders], [tb_astr_home], [tb_booksell06], [aa], [wage_table], [tb_], [replace_], [custommer], [tb_amese08], [table_name], [a_a], [tb_astr], [test_a], [tb_stu06], [tb_ware06], [checks], [saa], [sb], [tee], [DEPOSITS], [sc], [tb_sell07], [iid], [BIKES], [tb_sell], [AA_BB], [sdd], [tb_seller07], [transit], [checkss], [aad], [ORGCHART], [tb_student], [aads], [dd], [scs], [TABLE1], [coursee], [TABLE2], [tb_agoods], [CUSTOMER], [tb_abig], [PART], [tb_student09], [sa], [ORDERS], [tb_course09], [tabk], [AV], [teacher09], [tb_booksell07], [COLLECTIO], [test_1], [kak], [test_2], [sk], [AAA], [test_3], [tb_xsb03], [asa], [INVENTORY], [adc], [kasf], [TEMP], [BILLS], [aca], [aabb], [ak], [bills], [tb_sell09], [skk], [bank_accounts], [company], [tb_stuscore09], [tb_namployee09], [student], [teacher], [course], [tb_user], [ab], [tb_user1], [tb_user2], [tb_series09], [tb_info], [tb_privot20], [date1], [tb_unpivot10], [tb_client11], [aaid], [CUSTOMERS], [CSVTable], [CUSTOMERSS], [grade], [tb_grade12], [BALANCES], [tb_employee12], [SALARIES], [ALBUMS], [tb_particular], [ARTISTS], [ti], [MEDIA], [tes], [RECORDINGS], [aa<P], [aa_<o], [ds], [PRODUCTS], [dd_q], [adb], [kkd], [tk], [wage], [tb_stustudent03], [tb_stumark07], [tb_student03], [tb_stuachi], [ueue], [ta], [ui], [es], [NewContact], [UI], [UIW], [tb_mid], [tb_car03], [test], [testtable1], [tb_num03], [tb_fin], [tb_stuindex03], [tb_em], [tb_apay08], [tb_booksale03], [tb_gzmx], [tb_shopping03], [tb_person03], [stuinfo03], [tb_classname04], [teast], [tb_userinfo], [t], [gen_file], [userpwd], [gem_file], [tb_yuan], [av], [函数], [avtv],
我打印出来的结果是这样,我想问一下,里面动态语句后面拼接的豆号啥意思阿。还有,
中间的'['+name+']',它是如何进行拆分的,原本是一个字段,怎么一打印出来,全成了表名。 后面的,from sys.tables where create_date <2012-02-12 为何对打印的语句不影响。
我的意思是说,为何对变量赋值的时候,它只拼接前面的,@sql+'['+name']', 而后面的from... 却没连接。当然,要的就是它不联接。这位哥哥,你可要回答下,我第一次接触动态的。指教指教吧。
zhouixi 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 szstephenzhou 的回复:]
就是用动态拼接了 dorp table tb1,tb2,tb3。。。。。。

哪里看不懂的直接说,这里的大哥哥大姐姐都会帮你们的。。嘎嘎。。。

引用 28 楼 zhouixi 的回复:
引用 20 楼 szstephenzhou 的回复:
稍微修改了下UU的

SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE……
[/Quote]

哈哈,大哥哥,大姐姐,好吧,我就問問动态的问题。

SELECT @SQL=@SQL+ ' ['+NAME+']'+','
中间的,'['+NAME+']' 中括号外面和里面的引号是对中括号操作吗?起啥作用哦!
勿勿 2012-03-08
  • 打赏
  • 举报
回复
就是用动态拼接了 dorp table tb1,tb2,tb3。。。。。。

哪里看不懂的直接说,这里的大哥哥大姐姐都会帮你们的。。嘎嘎。。。
[Quote=引用 28 楼 zhouixi 的回复:]
引用 20 楼 szstephenzhou 的回复:
稍微修改了下UU的

SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)……
[/Quote]
hanlu0012 2012-03-08
  • 打赏
  • 举报
回复
帮顶一下吧,我也不懂
zhanghi7665 2012-03-07
  • 打赏
  • 举报
回复
晕,看不懂
zhouixi 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 szstephenzhou 的回复:]
稍微修改了下UU的

SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)
EXEC(@SQL)
[/Quote]

最后面的豆号啥意思哦,
zhouixi 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 travylee 的回复:]
引用 17 楼 zhouixi 的回复:

引用 13 楼 szstephenzhou 的回复:
哪里看不懂就问。
专门为你不用游标写了个


引用 10 楼 zhouixi 的回复:
引用 7 楼 travylee 的回复:
引用 5 楼 travylee 的回复:

SQL code

declare @tablename(20)
declare @maxid in……
[/Quote]

哈哈,是的,不然,头会看大。
_0筱筱0_ 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 beirut 的回复:]

引用 20 楼 szstephenzhou 的回复:

稍微修改了下UU的
SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL……
[/Quote]
最后处理一下就可以了,SELECT @SQL=LEFT(@SQL,LEN(@SQL)-1)
黄_瓜 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 szstephenzhou 的回复:]

稍微修改了下UU的
SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)
EXEC(@SQL)
[/Quote]


那不是uu 那是 xx你这个要多个,的
_0筱筱0_ 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 szstephenzhou 的回复:]

稍微修改了下UU的
SQL code
DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)
EXEC(@SQL)
[/Quote]
你这个最后会多个逗号,EXEC前要处理一下
SELECT @SQL=@SQL+STUFF(@SQL,LEN(@SQL)-1,1,'')
EXEC(@SQL)
黄_瓜 2012-03-07
  • 打赏
  • 举报
回复
declare @s varchar(1000)
select @s=isnull(@s+',','')+name from sysobjects where xtype='U'
select @s='drop table '+@s
exec(@s)
_0筱筱0_ 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhouixi 的回复:]

引用 14 楼 kuqideyupian 的回复:
SQL code
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL=ISNULL(@SQL+';','')+'DROP TABLE ['+NAME+']'
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT @SQL
--EXEC(@SQL)


貌……
[/Quote]
晕,看不懂就试试看喽,你不会只会用游标写吧
勿勿 2012-03-07
  • 打赏
  • 举报
回复
被你猜到了 嘎嘎
[Quote=引用 18 楼 zhouixi 的回复:]
引用 11 楼 szstephenzhou 的回复:
SQL code


declare @c int
declare @e int
declare @t varchar(20)
set @t=''
declare @f varchar(20)
set @f=''
set @c=0
select @e=count(name) from sysobjects where TY……
[/Quote]
勿勿 2012-03-07
  • 打赏
  • 举报
回复
稍微修改了下UU的
 DECLARE @SQL VARCHAR(MAX)
select @SQL='DROP TABLE'
SELECT @SQL=@SQL+ ' ['+NAME+']'+','
FROM SYS.TABLES
WHERE CREATE_DATE<'2012-1-1'
PRINT (@SQL)
EXEC(@SQL)
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zhouixi 的回复:]

引用 13 楼 szstephenzhou 的回复:
哪里看不懂就问。
专门为你不用游标写了个


引用 10 楼 zhouixi 的回复:
引用 7 楼 travylee 的回复:
引用 5 楼 travylee 的回复:

SQL code

declare @tablename(20)
declare @maxid int
declare @minid int
……
[/Quote]

幸好没给你用游标或者拼接动态语句
加载更多回复(18)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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