मैं फ़ाइल निर्देशिका को पढ़ने के लिए xp_cmdshell का उपयोग करने का प्रयास कर रहा हूं, फिर उन फ़ाइल नामों को लॉग तालिका में पेस्ट करें। हर बार जब मैं निर्देशिका पढ़ता हूं तो मैं लॉग टेबल में नई फाइल जोड़ना चाहता हूं। मेरे पास अभी जो है वह नीचे है लेकिन यह गन्दा है।

Declare @FileName Table(FileList Varchar(255))
Insert Into @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'
Declare @FilePath Varchar(255)
Select Top 1 FilePath= FileList 
FROM [dbo].[EOD_Log] 
right join  @FileName 
on filelist = File_log
where filelist is NOT NULL  and File_log is NULL 
Insert Into  [dbo].[EOD_Log] (File_log)
select @filepath from @FileName where @filepath is not NULL 
0
Justin Staugaitis 6 मार्च 2017, 03:14
कोड उस डेटा से पूछताछ करता है जिसकी मुझे सही आवश्यकता है लेकिन इसे eod_log तालिका में सम्मिलित नहीं किया जा रहा है।
 – 
Justin Staugaitis
6 मार्च 2017, 03:20
कभी उपयोग नहीं किया जाता है। चयन परिणामों का उपयोग नहीं किया जाता है (क्यों न उन्हें सीधे तालिका में डालें)।
 – 
Cade Roux
6 मार्च 2017, 04:40
क्षमा करें कि @filepath होना चाहिए न कि filepath2। मेरे पास इससे पहले एक प्रक्रिया है जिससे मैं अपनी EOD_log तालिका में कुछ भी नहीं पहचान सकता जो वर्तमान में निर्देशिका में है। यह तब उस फ़ाइल को लोड करता है जो EOD_Log में नहीं है। उसके बाद फ़ाइल लोड हो जाने के बाद मैं चाहता हूं कि उस फ़ाइल का नाम EOD_log में जोड़ा जाए। यह प्रक्रिया का वह हिस्सा है। लेकिन मैं इसे सम्मिलित करने के लिए नहीं मिल सकता। क्या आप सीधे बयान डालने में मेरी मदद कर सकते हैं?
 – 
Justin Staugaitis
6 मार्च 2017, 16:25

2 जवाब

सबसे बढ़िया उत्तर
DECLARE @FileName Table(FileList Varchar(255))

INSERT INTO @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'

INSERT INTO  [dbo].[EOD_Log] (filename)
SELECT FileList From @FileName 
WHERE Filelist NOT IN (select * FROM [dbo].[EOD_Log])  
ORDER BY filelist desc

यह आपकी NULLs समस्या को हल करना चाहिए, एक चर को खाली छोड़ने के बजाय जब एक असाइनमेंट में कोई पंक्तियाँ नहीं होती हैं तो यह केवल INSERTs नहीं करेगा। शीर्ष 1 का भी उपयोग क्यों करें? और मुझे लगता है कि आपको फाइललिस्ट कॉलम में एनयूएलएल की जांच करने की भी आवश्यकता नहीं है।

0
Cade Roux 6 मार्च 2017, 19:27
आपको धन्यवाद! मैं शीर्ष एक का चयन करता हूं क्योंकि मेरे पास डेटा आयात करने के लिए एक बीसीपी प्रक्रिया है जो मेरे लॉग में नहीं है और मेरे पास जो बीसीपी स्क्रिप्ट है वह केवल एक फ़ाइल नाम की अनुमति देगी। मेरे पास SQL ​​​​का मानक संस्करण है इसलिए मेरे पास SSIS पैकेज के लिए SQL प्रबंधन नहीं है। यह एक कामकाज है।
 – 
Justin Staugaitis
6 मार्च 2017, 20:15

मुझे यह काम मिल गया लेकिन यह अभी भी गन्दा है।

DECLARE @FileName Table(FileList Varchar(255))
INSERT INTO @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'
DECLARE @FilePath Varchar(255)
SELECT Top 1 @FilePath= FileList From @FileName 
WHERE FileList is Not Null and Filelist NOT IN (select * FROM [dbo].[EOD_Log])  
ORDER BY filelist desc
INSERT INTO  [dbo].[EOD_Log] (filename)
VALUES (@filepath)
DELETE from [dbo].[EOD_Log]
WHERE filename IS NULL 
0
Justin Staugaitis 6 मार्च 2017, 16:56