sqlserver存儲過程刪除
還是先上代碼吧
,可以先看
SQL語句去掉重復記錄,獲取重復記錄
復制代碼
代碼如下:
ALTER
procere
[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
procere
找不到這個存儲過程
因為我的程序資料庫有四個,而默認連接是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.StoredProcere;
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
Ⅱ sqlserver存儲過程如何定期刪除表中的數據 求代碼
方法一:
企業管理器
--管理
--SQL Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL 腳本(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
update table set columns=0 where id=1
--確定
--"調度"項
--新建調度
--"名稱"中輸入調度名稱
--"調度類型"中選擇你的作業執行安排
--如果選擇"反復出現"
--點"更改"來設置你的時間安排為一天一次
然後將SQL Agent服務啟動,並設置為自動啟動,否則你的作業不會被執行
設置方法: 我的電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.
Ⅲ SQLserver 存儲過程被刪除,怎麼恢復
實際操作系統文件在磁碟上的物理名稱,在該文件中將存儲數據或日誌(取決於定義哪個部分)。默認情況下,文件位於\Program Files\Microsoft SQLServer10.MSSQLSERVER\MSSQL(或者SQL Server安裝主目錄)的\Data子目錄下。如果是處理物理資料庫文件,那麼名稱將和資料庫名稱一樣,但是帶有.mdf擴展名。如果處理日誌文件,那麼名稱和資料庫文件的名稱一樣,但是有後綴_Log以及擴展名.ldf。建議使用默認擴展名.mdf(資料庫)和.ldf(日誌文件)。附屬文件的擴展名是.ndf。
Ⅳ sqlserver怎麼一次刪除兩張表裡的記錄
使用存儲過程,把兩個delete語句寫在一個存儲過程中
為其中的某一張表添加delete觸發器
Ⅳ SqlServer 資料庫的存儲過程許可權怎麼設置,只讓用戶查看存儲過程,不讓用戶修改添加刪除存儲過程怎麼做
用ORACLE就可以輕松實現這個安全管理,但是sql server 就不明了 可以嘗試查看SQL SERVER對於許可權的分類的文檔,sql server幫助裡面應該有,用沒有那種只能看不能修改和刪除的操作的許可權
Ⅵ java怎麼調用sqlserver 的存儲過程進行增刪改和訂單三天後自動刪除
java調用sqlserver的例子網上大把的啊,隨便找個就可以,訂單自動刪除你可以在資料庫做一個job然後定時掃描訂單,檢查訂單是否超過3天,超過了就刪除訂單,job你可以設置間隔半小時掃描一下,job裡面就一個sql就可以檢查出超過3天的訂單,檢查出來調用刪除就可以了 ,唯一序列就更好弄了,建一個索引,都可以確保唯一了
Ⅶ sqlserver 怎麼查詢哪些存儲過程被刪除了
這個查不到,除非你設有觸發器可以記錄,或者開啟了審計機制,可以從對資料庫操作中檢索drop proc操作
Ⅷ 怎樣在Sql server中創建,執行和刪除存儲過程
sqlserver存儲過程的基本操作:
一、創建存儲過程
1、語法格式:
create proc | procere pro_name
[{@參數數據類型} [=默認值] [output],
{@參數數據類型} [=默認值] [output],
....
]
as
sql_statements以上是最基本語法,舉個簡單的例子:
create proc p_test
as
select retu = 1存儲過程返回一個結果集:1
2、執行存儲過程
execute procere_name '' --存儲過程如果有參數,後面加參數格式為:@參數名=value,也可直接為參數值value例子調用結果:
3、刪除存儲過程
drop procere procere_name --在存儲過程中能調用另外一個存儲過程,而不能刪除另外一個存儲過程
Ⅸ 教您如何簡單刪除SQLServer資料庫的所有數據
也許很多讀者朋友都經歷過這樣的事情:要在開發資料庫基礎上清理一個空庫,但由於對資料庫結構缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的資料庫結構是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。
1.按照先後順序逐個刪除,這個方法在表非常多的情況下顯得很不現實,即便是表數量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關系,然後找出先刪哪個表,再刪哪個表,最後又刪哪個表。
首先得編寫代碼循環檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發人員也許都還未曾聽說,所以你在互聯網上搜索得到的解決辦法大多很復雜,也許有的人會認為,既然沒有官方文檔,這個存儲過程可能會不穩定,打心理上會排斥它,但事實並非如此。下面來先看一個完整的腳本:
這個腳本創建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發器,第三條語句才是真正地刪除所有數據,接下里的語句分別還原約束和觸發器,最後一條語句是顯示每個表中的記錄,當然這條語句也可以不要,我只是想確認一下是否清空了所有表而已。
Ⅹ 優化級聯刪除的存儲過程SqlServer
這個感覺上, 加一個 DELETE CASCADE 方式 的外鍵約束, 就什麼事情都解決了呀。
--創建測試主表.ID是主鍵.
CREATETABLEtest_main(
idINTNOTNULL,
valueVARCHAR(10),
PRIMARYKEY(id)
);
--創建測試子表.
CREATETABLEtest_sub(
idINTNOTNULL,
main_idINT,
valueVARCHAR(10),
PRIMARYKEY(id)
);
--插入測試主表數據.
INSERTINTOtest_main(id,value)VALUES(1,'ONE');
INSERTINTOtest_main(id,value)VALUES(2,'TWO');
--插入測試子表數據.
INSERTINTOtest_sub(id,main_id,value)VALUES(1,1,'ONEONE');
INSERTINTOtest_sub(id,main_id,value)VALUES(2,2,'TWOTWO');
1>--創建外鍵(使用ONDELETECASCADE選項,刪除主表的時候,同時刪除子表)
2>ALTERTABLEtest_sub
3>ADDCONSTRAINTmain_id_cons
4>FOREIGNKEY(main_id)REFERENCEStest_mainONDELETECASCADE;
5>
6>--測試刪除主表數據.將成功地執行.
7>DELETE
8>TEST_MAIN
9>WHERE
10>ID=1;
11>
12>--測試檢索子表,應該只有一條main_id=2的數據.
13>SELECT
14>*
15>FROM
16>test_sub;
17>
18>go
(1行受影響)
idmain_idvalue
--------------------------------
22TWOTWO
(1行受影響)