SQLServer開發(fā)問題前十名[5]

字號:

為行選擇創(chuàng)建一個腳本
    問題提交于2005年12月15日
    想象一下這個表:
    prod_key item_key pack_key last_sale
    LM001 1029 AD100 2004/12/05
    LM870 1029 AD100 2005/09/20
    PE789 1030 BC400 2003/07/12
    PE312 1030 BC400 2004/08/07
    我想要選出哪些在item_key 和pack_key相等的情況下,日期比較大的那一行。換句話說,我想要:
    LM870 1029 AD100 2005/09/20
    PE312 1030 BC400 2004/08/07
    你能幫我寫出這個腳本嗎?
    專家回答:
    這個表有主鍵嗎?那樣的話查詢可能會容易些。不管怎么樣,我覺得你應(yīng)該按照下面這樣:
    SELECT prod_key,item_key,pack_key,last_sale
    FROM (SELECT item_key,pack_key,MAX(last_sale) AS last_sale FROM tablex   GROUP BY item_key,pack_key) AS MaxDateTable
    WHERE tablex.item_key = MaxDateTable.item_key
    AND tablex.pack_key = MaxDateTable.pack_key
    AND tablex.last_sale = MaxDateTable.last_sale
    列出沒有記錄的數(shù)據(jù)庫表
    問題提交于2006年5月16日
    我創(chuàng)建了一個動態(tài)的SQL Server查詢來輸出表中行的數(shù)量。我的目標是列出在數(shù)據(jù)庫中沒有記錄的表。查詢?nèi)缦滤?
    declare @strsql varchar(100)
    declare @tablename varchar(50)
    @tablename=’table123′@strsql=’select count(*) from ‘ + @tablename   exec(@strsql)
    我得到了輸出,但是我無法把這個值存儲到變量中以備查看。
    我想要這樣查看:
    /* @countvariable=0
    print(@tablename)*/
     
    還有其它的解決方法嗎?
    專家回答:
    你可以讓你的解決方案更加靈活一些,通過從sysobjects表中抓取表名:
    declare @strsql varchar(256)
    create table #emptytables (tablename varchar(128), table_rowcount int)select @strsql=’select distinct o.name as TableName, x.rowcnt as   Table_RowCount
    from sysobjects o
    inner join sysindexes x
    on o.id = x.id
    where x.rowcnt = 0 and
    o.type = ‘’U”’insert #emptytables (TableName, Table_rowcount) exec (@strsql)
    select * from #emptytables
    drop table #emptytables