Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

FileTable का उपयोग करके SQL INSERT के माध्यम से उप निर्देशिका बनाना

GetPathLocator() . के बाद से मैंने उपनिर्देशिका बनाने के लिए इसका उपयोग किया है एक नया path_locator उत्पन्न नहीं करेगा मेरे लिए मूल्य - यह केवल मौजूदा hierarchyids . की व्याख्या करेगा ।

DECLARE @parentdir table(path hierarchyid not null);
DECLARE @subdir_locator hierarchyid

-- Create Parent Directory, OUTPUT inserted parent path
INSERT INTO FileTable0 (name,is_directory,is_archive) 
OUTPUT INSERTED.path_locator into @parentdir
SELECT 'Directory', 1, 0

-- Create new path_locator based upon parent
SELECT @subdir_locator = dbo.GetNewPathLocator(path) from @parentdir

-- Create Subdirectory
INSERT INTO FileTable0 (name,path_locator,is_directory,is_archive) 
VALUES ('subdirectory', @subdir_locator, 1, 0);

उपरोक्त कोड ब्लॉक डिफ़ॉल्ट path_locator मान यहां खोजा गया जो एक नया hierarchyid बनाता है GUID से प्रतिनिधित्व (newid() कोड> विधि, और सरल पार्सिंग ) फ़ंक्शन GetNewPathLocator() SQL सर्वर में कहीं भी मौजूद नहीं है जो मुझे मिल सकता है (hierarchyid.GetDescendant() सबसे नज़दीक है जो मुझे मिल सकता है, लेकिन यह उस मूल संरचना का उपयोग नहीं करता है जिस पर FileTable निर्भर करता है ) शायद SQL.NEXT में...

CREATE FUNCTION dbo.GetNewPathLocator (@parent hierarchyid = null) RETURNS varchar(max) AS
BEGIN       
    DECLARE @result varchar(max), @newid uniqueidentifier  -- declare new path locator, newid placeholder       
    SELECT @newid = new_id FROM dbo.getNewID; -- retrieve new GUID      
    SELECT @result = ISNULL(@parent.ToString(), '/') + -- append parent if present, otherwise assume root
                     convert(varchar(20), convert(bigint, substring(convert(binary(16), @newid), 1, 6))) + '.' +
                     convert(varchar(20), convert(bigint, substring(convert(binary(16), @newid), 7, 6))) + '.' +
                     convert(varchar(20), convert(bigint, substring(convert(binary(16), @newid), 13, 4))) + '/'     
    RETURN @result -- return new path locator     
END
GO

फ़ंक्शन GetNewPathLocator() एक SQL दृश्य की भी आवश्यकता होती है getNewID newid() . का अनुरोध करने के लिए इस SO पोस्ट की ट्रिक का उपयोग करके ।

create view dbo.getNewID as select newid() as new_id 

कॉल करने के लिए GetNewPathLocator() , आप डिफ़ॉल्ट पैरामीटर का उपयोग कर सकते हैं जो एक नया hierarchyid उत्पन्न करेगा या मौजूदा hiearchyid . में पास करें स्ट्रिंग प्रतिनिधित्व (.ToString() ) बच्चा पैदा करने के लिए hierarchyid जैसा कि नीचे देखा गया है...

SELECT dbo.GetNewPathLocator(DEFAULT); -- returns /260114589149012.132219338860058.565765146/
SELECT dbo.GetNewPathLocator('/260114589149012.132219338860058.565765146/'); -- returns /260114589149012.132219338860058.565765146/141008901849245.92649220230059.752793580/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उदाहरण के साथ SQL जॉइन प्रकारों का अवलोकन

  2. एसक्यूएल दो कॉलम को सेलेक्ट स्टेटमेंट में मिलाएं

  3. SQL सर्वर एजेंट जॉब (T-SQL) के लिए जॉब स्टेप अपडेट करें

  4. SQL Server 2008 में दो तालिका मर्ज करें

  5. SQL सर्वर 2000 के साथ @TABLE EXEC @query में सम्मिलित करें