2010-02-19 13 views
8

प्रश्न: जब मैं एक तालिका (T_TableName) SQL सर्वर प्रबंधन-स्टूडियो का उपयोग कर बनाते हैं, तो यह हमेशाSQL सर्वर गलत तालिका नाम बना रहा है, क्यों?

Domain\UserName.T_TableName 

बजाय

dbo.T_TableName 

क्या गलत है के रूप में तालिका बनाता है?

उत्तर

9

यदि आप अपने टेबल नाम पर स्पष्ट रूप से एक स्कीमा निर्दिष्ट नहीं करते हैं, तो यह उपयोगकर्ता की वर्तमान डिफ़ॉल्ट स्कीमा में बनाया जाएगा।

मैं शर्त लगाता हूं कि आप जिस उपयोगकर्ता का उपयोग कर रहे हैं उसका अपना व्यक्तिगत स्कीमा सेट डिफ़ॉल्ट डिस्प्ले के रूप में है - यही कारण है कि आपकी टेबल अपनी व्यक्तिगत स्कीमा में बनाई गई है।

आप देख सकते हैं क्या डेटाबेस उपयोगकर्ताओं आप और क्या उनके डिफ़ॉल्ट स्कीमा sys.database_principals निरीक्षण (SQL सर्वर 2005 और ऊपर) के द्वारा होता है:

  • स्कीमा निर्दिष्ट करें:

    SELECT name, type_desc, default_schema_name 
    FROM sys.database_principals 
    

    इस हल करने के लिए आप स्पष्ट रूप से उपयोग करना चाहते हैं (वैसे भी सर्वोत्तम अभ्यास!)

    CREATE TABLE dbo.T_TableName 
    
  • परिवर्तन dbo

    ALTER USER [Domain\YourUser] WITH DEFAULT_SCHEMA = dbo 
    

लेकिन करने के लिए उपयोगकर्ता के डिफ़ॉल्ट स्कीमा अंगूठे का एक सामान्य नियम के रूप में, मैं हमेशा का उपयोग करना चाहिये "dbo।" स्पष्ट रूप से उपसर्ग, यदि आप अपनी सभी डेटाबेस ऑब्जेक्ट्स को डीबीओ स्कीमा में रखना चाहते हैं। प्रदर्शन के साथ भी मदद करता है (कभी भी इतना छोटा) क्योंकि SQL सर्वर को अलग-अलग स्कीमा में शिकार नहीं करना पड़ेगा, अगर आप स्पष्ट रूप से यह बताते हैं कि आपकी डीबी ऑब्जेक्ट्स कहां रहते हैं।

3

इसे एसएसएमएस में dbo.T_TableName पर कॉल करें। यदि आपके पास सही अनुमतियां हैं, तो यह काम करेगी।

1

क्या आपने डेटाबेस बनाया है जिसके लिए आपने डेटाबेस बनाया है db_owner? यदि नहीं, तो यह मुद्दा हो सकता है। डेटाबेस में अपनी उपयोगकर्ता मैपिंग अनुमतियों को जोड़ने का प्रयास करें।

USE [yourDatabase] 
GO 
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup' 
GO 
4

आप या तो के रूप में "dbo.Whatever" अपने तालिका बनाने के लिए की जरूरत है, या आप की तरह एक आदेश जारी करके अपने डिफ़ॉल्ट स्कीमा को बदलने के लिए (या अपने एसए यह तुम्हारे लिए क्या किया है) की जरूरत है:

ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo; 
संबंधित मुद्दे