sqlserver利用預存程序去除重複行的sql語句

來源:互聯網
上載者:User

還是先上代碼吧 ,可以先看 SQL語句去掉重複記錄,擷取重複記錄 複製代碼 代碼如下:ALTER procedure [dbo].[PROC_ITEMMASTER_GETUNIQUE] @PAGEINDEX INT,@uid int,@itemnumber varchar(50)
AS
begin tran --開始事務
drop table [ItemMaster].[dbo].[testim] --刪除表
--把不重複記錄轉存到testim中
select * into [ItemMaster].[dbo].[testim] from [ItemMaster].[dbo].[dat_item_master] where item_uid in(select min(item_uid) as item_uid from [ItemMaster].[dbo].[dat_item_master] group by item_number) and status=0
select top 10 * from [ItemMaster].[dbo].[testim] where item_uid not in (select top (10*(@PAGEINDEX-1)) item_uid from [ItemMaster].[dbo].[testim])
and owneruid=@uid and item_number like @itemnumber+'%'

--判斷是否出錯
if @@error<>0
begin
rollback tran --出錯則復原
end
else
begin --否則提前事務
commit tran
end

我的資料是這樣的:因為item_uid是識別欄位,item_number有重複的,

我想過濾成這樣:

順帶說幾個在編程的時候遇到的小問題

1.程式 出現 Could not find stored procedure 找不到這個預存程序

因為我的程式資料庫有四個,而預設串連是A,但實際要執行B庫裡的預存程序,導致出錯,

解決辦法1:可在A裡面建個一樣的預存程序2:在執行串連的時候,替換下資料庫就行了

2. asp.net/C# 將預存程序中返回的資料集,填充到dataset/datatable

複製代碼 代碼如下:SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SolutionSQLServer"].ToString());
SqlCommand cmd = new SqlCommand("Test",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaxId", SqlDbType.Int).Value = 12000;

SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);

在這感謝 http://www.cnblogs.com/liujuncm5/archive/2009/08/31/1557569.html

3.在預存程序裡面,寫SQL語句不能動態不加order by 功能

比如

複製代碼 代碼如下:--·@new_orderby 是傳入參數,不能這樣寫
select top (10*(2-1)) item_uid from testim order by @new_orderby

--執行這個的時候,SQL會出現 The SELECT item identified by the ORDER BY number 1 contains a variable as part
of the expression identifying a column position. Variables are only allowed when
ordering by an expression referencing a column name.

不過我找到解決辦法,不過很麻煩,

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=9328 (第二個回答用 ' sql '進行串連)

http://databases.aspfaq.com/database/how-do-i-use-a-variable-in-an-order-by-clause.html (用case end 也行)

4. select into 和 insert into select 兩種複製文句 (這裡感謝http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html)

  1.INSERT INTO SELECT語句

語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

要求目標表Table2必須存在,由於目標表Table2已經存在,所以我們除了插入源表Table1的欄位外,還可以插入常量。

  2.SELECT INTO FROM語句

語句形式為:SELECT vale1, value2 into Table2 from Table1

要求目標表Table2不存在,因為在插入時會自動建立表Table2,並將Table1中指定欄位資料複製到Table2中。

5.順便複習下常用的SQL方法語句

複製代碼 代碼如下:declare @name varchar(200) --聲明變數
set @name='abcd;def' --賦值
print 'exec len :'+Convert(varchar(10),Len(@name)) --convert(type,value)轉換,Len(value)擷取大小
print 'exec charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value) 在value中尋找find的位置
print 'not replace:'+@name
print 'exec replace:'+Replace(@name,';','') --用replace替換
print 'exec substring:'+Substring(@name,0,3)--用substring截取
print @@RowCount --返回上一行代碼受影響的行數

作者:chenhuzi

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.