2013-11-26 26 views
0

我有許多數據庫,跨不同的服務器,所有數據庫都包含數十個表格,並且有一列共同。 注意 - 所有數據庫都在SQL Server 2008 R2上運行。設置/更改所有表的默認值(相同的列名/類型)

我需要檢查(以及必要的更改)每個名爲'tblFAC%'的表中的值。 該列被命名爲'SOURCE',值應該是'((0))'

這些是系統生成的列,這就是爲什麼它們都是必需的,並且(通常)是統一的。

我發現的很偶然,我會看到奇怪的錯誤條目 - 通常是{blank}或'(0)' - 並且糾正這種錯誤的唯一方法是打開每個數據庫中的每個表,設計視圖,然後選擇「源」字段並檢查默認值,必要時進行修改。因此,我想知道是否有任何一種腳本檢查數據庫中所有名爲'tblFAC%'的表的'SOURCE'字段的默認值,並將它們設置爲'((0)) '這不是已經存在的情況。

感謝您的閱讀。 克雷格

回答

0

這將顯示其中用於SOURCE默認約束沒有被設置爲((0))所有模式/表:

SELECT s.name AS schema_ 
     , t.name AS table_ 
     , OBJECT_DEFINITION(default_object_id) AS default_value 
FROM sys.columns c 
JOIN sys.tables t 
    ON c.object_id = t.object_id 
JOIN sys.schemas s 
    ON t.schema_id = s.schema_id 
JOIN sys.default_constraints d 
    ON c.default_object_id = d.object_id 
WHERE t.name LIKE 'tblFAC%' 
    AND c.name = 'SOURCE' 
    AND OBJECT_DEFINITION(default_object_id) <> '((0))' 

你可以使用上面建立一個ALTER語句,我想你可以將其設置爲在每臺服務器上運行,不確定是否可以查詢跨服務器sys表。

更新,獎金問題: 沒有時間來測試這一點,但發現那裏沒有限制設置,你就應該能夠將其更改爲一個LEFT JOIN和檢查NULL

SELECT s.name AS schema_ 
     , t.name AS table_ 
     , OBJECT_DEFINITION(default_object_id) AS default_value 
FROM sys.columns c 
JOIN sys.tables t 
    ON c.object_id = t.object_id 
JOIN sys.schemas s 
    ON t.schema_id = s.schema_id 
LEFT JOIN sys.default_constraints d 
    ON c.default_object_id = d.object_id 
WHERE t.name LIKE 'tblFAC%' 
    AND c.name = 'SOURCE' 
    AND OBJECT_DEFINITION(default_object_id) IS NULL 
+0

謝謝朋友。這有很大幫助。我發現錯誤的條目(例如單括號)。唯一的問題是忽略空白條目。你能提供關於尋找這些的任何建議嗎? –

+0

@PeEed「空白條目」是什麼意思?你的意思是'NULL'的值,還是你的意思是空字符串''''或其他什麼? – gvee

+0

我想你是指沒有約束的地方?查看更新。 –

相關問題