2012-04-05 49 views
1

我只能用存儲過程看到這個工作,我無法弄清楚語法。我基本上有一些外部系統調用SQL查詢,我想驗證表中存在第一個使用類似這樣的代碼:如何檢查表是否存在並返回一個值(0/1),如果沒有使用存儲過程?

if (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'OrderUpdates')) 
    BEGIN 
    --return 1 or 0 if it exists or doesn't exist 
    END 

我不能讓return語句才能正常工作。

+0

中列出的類型確定的正確值返回僅用於存儲過程。 – 2012-04-05 21:54:25

+0

你的意思是退貨還是選擇? – 2012-04-05 22:04:49

+0

我的意思是我想要一列中有一行的結果集。不確定解釋的正確措辭。 – 2012-04-06 17:39:55

回答

2
SELECT CAST(COUNT(*) AS BIT) -- Should be unique to give 0 or 1 as result 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'OrderUpdates' 
    -- Not sure if you want views or not: 
    AND TABLE_TYPE = 'BASE TABLE' 
+0

這正是我需要的! – 2012-04-06 15:42:26

1

我不明白你在做什麼 - RETURN只在存儲過程或函數中有效。

如果你想在一組同樣的事情(因爲調用者期待一個行集),那麼這樣的事情可以工作:

SELECT 1 AS DoesItExist 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'OrderUpdates' 
UNION ALL 
SELECT 0 
WHERE NOT EXISTS (SELECT * 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'OrderUpdates') 
+0

我把評論的回報,因爲我不知道正確的詞使用。我希望它能夠返回一個值。 – 2012-04-06 15:43:02

+0

@Alex K Return可以從表值函數返回表,但通常只能返回一個值。選擇各種東西的過程將返回結果集以及返回值(並且您也可以選擇輸出參數),但結果集並不是真正的返回值。聽起來你不想使用存儲過程,所以我不確定你要返回什麼。我想這意味着你只能擁有產生客戶端可以配置爲解釋的結果集的SQL(即一行中的一個值)。 – 2012-04-06 19:46:23

+0

是的,一個結果集就是我要去做的。我認爲這也行得通 – 2012-04-06 20:53:05

0

SQL Server有一個名爲「表」的表,其中包含數據庫中的表的列表。所以,下面的代碼應該有所幫助:

CREATE PROCEDURE DoesTableExist(@table VARCHAR(50), @exists BIT OUTPUT) 
AS 
BEGIN 
IF EXISTS(SELECT * FROM sys.tables WHERE name = @table) 
    SET @exists = 1 
ELSE 
    SET @exists = 0 

RETURN @exists 
END 
0

你可以做這樣的事情:

USE SomeDatabase; 
IF OBJECT_ID('YourTable', 'U') IS NOT NULL 
BEGIN 
    SELECT 1 
END ELSE BEGIN 
    SELECT 0 
END 

如果你正在尋找比用戶表以外的類型,你可以在OBJECT_ID改變「U」以sys.objects

+0

由於表格(或視圖)以外的對象,這很容易導致誤報。 – 2012-04-05 22:11:33

+0

@TimLehner你在編輯之間引起了我的注意。 :-)查看修訂後的答案! – bhamby 2012-04-05 22:15:16

+0

我以前去過那裏! – 2012-04-05 22:15:31

相關問題