一:在一个事务中执行如下语句:
select *
from TableAselect *
from TableB结果总是先返回TableA的数据,后返回TableB的数据。
有没有办法将TableA的数据清除,只返回TableB的数据。
二:我能用sql语句遍历到数据库中所有的表吗?就是我不管表名是什么,我想用sql语句将表的数据清除,但是表又不能删除(所以删除数据库的方法不行),而数据表的名字不确定,随时都可能变!
请问如何做?

解决方案 »

  1.   

    一:在一个事务中执行如下语句:
    select * from TableA
    go
    select * from TableB
    go
    结果总是先返回TableA的数据,后返回TableB的数据。有没有办法将TableA的数据清除,只返回TableB的数据
    ---------------------------
    你先选TableA的数据 当然先返回了 后面一句话不清楚你的意思?二:我能用sql语句遍历到数据库中所有的表吗?就是我不管表名是什么,我想用sql语句将表的数据清除,但是表又不能删除(所以删除数据库的方法不行),而数据表的名字不确定,随时都可能变!请问如何做?
    ---------------------------
    可以使用master..sp_msforeachtable系统存储过程 
    exec master..sp_msforeachtable "truncate table '?'"
      

  2.   

    所有表select [name] from sysobjects where xtype='U'
      

  3.   

    自己寫個cursor就可以清掉所有表的數據了
    declare @sql varchar(1000),@name varchar(100)
    declare c1 cursor scroll for
    select [name] from sysobjects where xtype='U'
    open c1
    fetch first from c1 into @name
    while @@fetch_status=0
      begin
       set @sql='truncate table '+@name
       exec(@sql)
      end
    close c1
    deallocate c1
      

  4.   

    更正:declare @sql varchar(1000),@name varchar(100)
    declare c1 cursor scroll for
    select [name] from sysobjects where xtype='U'
    open c1
    fetch first from c1 into @name
    while @@fetch_status=0
      begin
       set @sql='truncate table '+@name
       exec(@sql)
       fetch next form c1 into @name
      end
    close c1
    deallocate c1
      

  5.   

    一:在一个事务中执行如下语句:
    select * from TableA
    go
    select * from TableB
    go
    结果总是先返回TableA的数据,后返回TableB的数据。有没有办法将TableA的数据清除,只返回TableB的数据
    ---------------------------
    你先选TableA的数据 当然先返回了 后面一句话不清楚你的意思?
    ========================================================
    是我没有说清楚!我是想在返回的数据集中没有TableA的数据。就是在sql语句中执行sq语句:
    select * from TableA
    select * from TableB
    但是返回的时候只返回TableA的数据。
    这样说也许还是不清楚!我就这样说吧!
    需求:一般的信息系统登录验证,他们不限制用户名密码串长度,也不做一般化的处理,比如用户名密码有"'"字符的处理。这对sqlserver2000是危险的!因为可以用这个来执行任何的sql语句。如下(用c#):
    sqlstr="select * 
          +" From LoginTableName"
          +" Where LoginName='"+textBox1.Text+"' and PWD='"+textBox2.Text+"'"
    这个时候如果在textBox1.Text中输入精心组织好了的话,就可以为所欲为了!
      

  6.   

    楼主的意思好像
    sqlstr="select * "
          +" From LoginTableName"
          +" Where LoginName='"+textBox1.Text+"' and PWD='"+textBox2.Text+"'"
    这个语句代表的就是select * from TableA吧?
    如果是这样,象让SELECT语句不返回值的办法就是声明个局部变量,大概意思如下,楼主自己转换为C#字符串表达式吧:
    declare @i int
    select @i = count(1) from LoginTableName where LoginName = 'USERNAME' and PWD = 'PASSWORD'     /*相当于select * from tableA */
    if @i = 0
    begin
        raiserror('Sorry,You are not members!',16,1)    /*返回错误,不是成员*/
        ...       /*其它处理代码*/
        return
    end
    select * from tableB   /*相当于select * from tableB */
      

  7.   

    比如界面上 密码用*来代替 按下确认之后进行密码和帐号的完整性和长度判断如果没有问题 logintable中查找该帐号 如果没有给出错误消息如果没有问题 对用户输入密码做函数计算 跟select @pwd = password from logintable where logaccount = '....'做比较仅供参考
      

  8.   

    问题出在那个“‘”单引号!有些粗心的人对于用户名中的'符号不给处理!于是在用户名出输入一段精心设计的sql代码就可搞破坏,甚至是没有管理员密码有管理员账号情况下,依然能使用管理员权限!
    还有,如果那个单引号的问题没有做处理,那么别人就可用你的系统在你的系统的后台数据库上捣鼓一些东西!
    请你们仔细的想一想!
    以上是在sqlserver2000的环境下讨论的!