sql判斷存儲過程是否有效
1 判斷資料庫教程是否存在
Sql代碼
if exists (select * from sys.databases where name = 』資料庫名』)
drop database [資料庫名] if exists (select * from sys.databases where name = 』資料庫名』)
drop database [資料庫名]
2 判斷表是否存在
Sql代碼
if exists (select * from sysobjects where id = object_id(N』[表名]』) and OBJECTPROPERTY(id, N』IsUserTable』) = 1)
drop table [表名] if exists (select * from sysobjects where id = object_id(N』[表名]』) and OBJECTPROPERTY(id, N』IsUserTable』) = 1)
drop table [表名]
3 判斷存儲過程是否存在
Sql代碼
if exists (select * from sysobjects where id = object_id(N』[存儲過程名]』) and OBJECTPROPERTY(id, N』IsProcere』) = 1)
drop procere [存儲過程名] if exists (select * from sysobjects where id = object_id(N』[存儲過程名]』) and OBJECTPROPERTY(id, N』IsProcere』) = 1)
drop procere [存儲過程名]
4 判斷臨時表是否存在
Sql代碼
if object_id(』tempdb..#臨時表名』) is not null
drop table #臨時表名 if object_id(』tempdb..#臨時表名』) is not null
drop table #臨時表名
5 判斷視圖是否存在
Sql代碼
--SQL Server 2000
IF EXISTS (SELECT * FROM sysviews WHERE object_id = 』[dbo].[視圖名]』
--SQL Server 2005
IF EXISTS (SELECT * FROM sys.views WHERE object_id = 』[dbo].[視圖名]』 --SQL Server 2000
IF EXISTS (SELECT * FROM sysviews WHERE object_id = 』[dbo].[視圖名]』
--SQL Server 2005
IF EXISTS (SELECT * FROM sys.views WHERE object_id = 』[dbo].[視圖名]』
6 判斷函數是否存在
Sql代碼
-- 判斷要創建的函數名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N』[dbo].[函數名]』) and xtype in (N』FN』, N』IF』, N』TF』))
drop function [dbo].[函數名] -- 判斷要創建的函數名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N』[dbo].[函數名]』) and xtype in (N』FN』, N』IF』, N』TF』))
drop function [dbo].[函數名]
7 獲取用戶創建的對象信息
Sql代碼
SELECT [name],[id],crdate FROM sysobjects where xtype=』U』
/*
xtype 的表示參數類型,通常包括如下這些
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日誌
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復制篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程
*/ SELECT [name],[id],crdate FROM sysobjects where xtype=』U』
/*
xtype 的表示參數類型,通常包括如下這些
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日誌
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復制篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程
*/
8 判斷列是否存在
Sql代碼
if exists(select * from syscolumns where id=object_id(』表名』) and name=』列名』)
alter table 表名 drop column 列名 if exists(select * from syscolumns where id=object_id(』表名』) and name=』列名』)
alter table 表名 drop column 列名
9 判斷列是否自增列
Sql代碼
if columnproperty(object_id(』table』),』col』,』IsIdentity』)=1
print 』自增列』
else
print 』不是自增列』
SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(』表名』)
AND is_identity=1 if columnproperty(object_id(』table』),』col』,』IsIdentity』)=1
print 』自增列』
else
print 』不是自增列』
SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(』表名』)
AND is_identity=1
10 判斷表中是否存在索引
Sql代碼
if exists(select * from sysindexes where id=object_id(』表名』) and name=』索引名』)
print 』存在』
else
print 』不存在 if exists(select * from sysindexes where id=object_id(』表名』) and name=』索引名』)
print 』存在』
else
print 』不存在
11 查看資料庫中對象
Sql代碼
SELECT * FROM sys.sysobjects WHERE name=』對象名』 SELECT * FROM sys.sysobjects WHERE name=』對象名』
㈡ mssql里的一個存儲過程判斷,請寫出代碼
設計得很復雜,卻又不能好好地命名欄位:(
CREATEPROCEDUREfun(
@mint
,@nint
)AS
BEGIN
SELECTF3
,SUM(Value)--合並Tx
FROM(
SELECTID
,F3
,min(@n,F2)--取結束值中小的
-max(@m,F1)--取起始值中大的
ASValue
FROMTable1
WHERE@m>=F1AND@n<=F2
)--先計算每行中F3的計算值
GROUPBYF3
ORDERBYF3
END
㈢ 存儲過程怎麼判斷執行成功
這個分兩種情況:
由於存儲過程是資料庫自身的東西,JAVA只是調用
所以,如果是語法上的錯誤 sql直接不能執行 , JAVA確實能接收到異常
但是如果語法沒有錯誤, 只是你寫的條件錯了, sql能執行,只是沒有得到你想要的效果, 這個情況, 是判斷不了的, 都會視為成功執行
如果 sql = "select from aaa where id > 10" 這直接是語法 錯誤,肯定報錯
但 如果 sql = "update aaa set name = 'aaa' where id='123' "; 沒有語法 錯誤 ,能執行, 只是沒有id = 123的數據, 你要改124的,錯寫成123了, 就修改不了, 但也不會報任何錯 北京科蘭
㈣ SQL 存儲過程如何判斷是否刪除
給你個思路吧,對刪除的數據在做一次查詢,如果查詢還有返回結果的話,那就肯定是刪除失敗,反之則刪除成功。
㈤ sql存儲過程 如何用IF來判斷變數表內數據是否存在
可以定義一個變數接收值
declare @A as varchar(max),@count integer
select @A='select @count = count(*) from '+ @變數表 + ' where 姓名='+@姓名
exec(@A)
if @count > 0
...
㈥ sql 怎麼判斷存儲過程是否執行
select * from master.dbo.sysprocesses
-- 列出 spid > 50 的.
對每個 spid 用 dbcc inputbuffer(spid) 看執行的文本, 如果搜索完所有的 spid, 其執行的文本中都沒有包括你的存儲過程.
則基本上可判斷出存儲過程未執行.
㈦ 存儲過程中用什麼來判斷sql語句是否執行成功
Transact-SQL 參考
@@ERROR
返回最後執行的 Transact-SQL 語句的錯誤代碼。
語法
@@ERROR
返回類型
integer
注釋
當 Microsoft® SQL Server™ 完成 Transact-SQL 語句的執行時,如果語句執行成功,則 @@ERROR 設置為 0。若出現一個錯誤,則返回一條錯誤信息。@@ERROR 返回此錯誤信息代碼,直到另一條 Transact-SQL 語句被執行。您可以在 sysmessages 系統表中查看與 @@ERROR 錯誤代碼相關的文本信息。
由於 @@ERROR 在每一條語句執行後被清除並且重置,應在語句驗證後立即檢查它,或將其保存到一個局部變數中以備事後查看。
示例
A.用 @@ERROR 檢測一個特定錯誤
下面的示例用 @@ERROR 在一個 UPDATE 語句中檢測限制檢查沖突(錯誤 #547)。
USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "A check constraint violation occurred"
B.用 @@ERROR 有條件地退出一個過程
在此示例中,IF...ELSE 語句在存儲過程中的 INSERT 語句後檢測 @@ERROR。@@ERROR 變數的值將決定傳給調用程序的返回值,以指示此過程的成功與失敗。
USE pubs
GO
-- Create the procere.
CREATE PROCEDURE add_author
@au_id varchar(11),@au_lname varchar(40),
@au_fname varchar(20),@phone char(12),
@address varchar(40) = NULL,@city varchar(20) = NULL,
@state char(2) = NULL,@zip char(5) = NULL,
@contract bit = NULL
AS
-- Execute the INSERT statement.
INSERT INTO authors
(au_id, au_lname, au_fname, phone, address,
city, state, zip, contract) values
(@au_id,@au_lname,@au_fname,@phone,@address,
@city,@state,@zip,@contract)
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT "An error occurred loading the new author information"
RETURN(99)
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT "The new author information has been loaded"
RETURN(0)
END
GO
C.用 @@ERROR 檢測幾條語句的成功
下面的示例取決於 INSERT 和 DELETE 語句的成功操作。局部變數在兩條語句後均被設置為 @@ERROR 的值,並且用於此操作的共享錯誤處理常式中。
USE pubs
GO
DECLARE @del_error int, @ins_error int
-- Start a transaction.
BEGIN TRAN
-- Execute the DELETE statement.
DELETE authors
WHERE au_id = '409-56-7088'
-- Set a variable to the error value for
-- the DELETE statement.
SELECT @del_error = @@ERROR
-- Execute the INSERT statement.
INSERT authors
VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
-- Set a variable to the error value for
-- the INSERT statement.
SELECT @ins_error = @@ERROR
-- Test the error values.
IF @del_error = 0 AND @ins_error = 0
BEGIN
-- Success. Commit the transaction.
PRINT "The author information has been replaced"
COMMIT TRAN
END
ELSE
BEGIN
-- An error occurred. Indicate which operation(s) failed
-- and roll back the transaction.
IF @del_error <> 0
PRINT "An error occurred ring execution of the DELETE
statement."
IF @ins_error <> 0
PRINT "An error occurred ring execution of the INSERT
statement."
ROLLBACK TRAN
END
GO
D. 與 @@ROWCOUNT 一同使用 @@ERROR
下面的示例用 @@ERROR 和 @@ROWCOUNT 驗證一條 UPDATE 語句的操作。為任何可能出現的錯誤而檢驗 @@ERROR 的值,而用 @@ROWCOUNT 保證更新已成功應用於表中的某行。
USE pubs
GO
CREATE PROCEDURE change_publisher
@title_id tid,
@new_pub_id char(4)
AS
-- Declare variables used in error checking.
DECLARE @error_var int, @rowcount_var int
-- Execute the UPDATE statement.
UPDATE titles SET pub_id = @new_pub_id
WHERE title_id = @title_id
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT
-- Check for errors. If an invalid @new_pub_id was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @error_var <> 0
BEGIN
IF @error_var = 547
BEGIN
PRINT "ERROR: Invalid ID specified for new publisher"
RETURN(1)
END
ELSE
BEGIN
PRINT "ERROR: Unhandled error occurred"
RETURN(2)
END
END
-- Check the rowcount. @rowcount_var is set to 0
-- if an invalid @title_id was specified.
IF @rowcount_var = 0
BEGIN
PRINT "Warning: The title_id specified is not valid"
RETURN(1)
END
ELSE
BEGIN
PRINT "The book has been updated with the new publisher"
RETURN(0)
END
GO
㈧ oracle存儲過程怎麼判斷一條sql語句是否成功
oracle存儲過程判斷一條sql語句是否成功的方法是增加exception處理,如果沒有拋出exception,那就證明正常執行了。
在Oracle中,異常分為以下兩類:
Oracle預定義異常
用戶自定義異常
在Oracle中預定義的異常如下表所示:
在Oracle中有以下三種方式觸發異常:
由Oracle自動觸發異常
使用RAISE語句手工觸發
調用存儲過程RAISE_APPLICATION_ERROR手工觸發
代碼將演示Oracle自動觸發異常:
-- Created on 2015-7-14 by JellyThink
declare
iA NUMBER(2) := 10;
begin
iA := iA / 0; -- Oracle自動觸發異常
dbms_output.put_line(iA);
exception
when ZERO_DIVIDE then
dbms_output.put_line('Error Code:' || SQLCODE || ' ' || SQLERRM);
when others then
dbms_output.put_line('Others Exception');
end;
㈨ C#中使用 SQL 存儲過程 ,怎樣驗證是否成功執行
對於 UPDATE、INSERT 和 DELETE 語句,返回值為該命令所影響的行數。對於其他所有類型的語句,返回值為 -1。
驗證SQL 存儲過程成功執行可以通過輸出參數來判斷,自己在存儲過程中增加
參考http://blog.csdn.net/wendy_chenlu/archive/2008/12/11/3498387.aspx
㈩ 如何判斷SQL中是否已經存在某表,存儲過程,函數等
1、是否存在某表的判斷
ifexists(='表名'andxtype='U')
begin
--存在
end
2、是否存在某存儲過程的判斷
ifexists(='存儲過程名'andxtype='P')
begin
--存在
end
3、是否存在某函數的判斷
ifexists(='函數名'andxtype='FN')
begin
--存在
end