2016-08-03 8 views
-1

Ich verwende SQL-Auftrag (SQL Server 20208 R2), und ich möchte die Ergebnisse des Skripts in einem Ordner als Pipe-Delimited speichern. Gibt es eine Möglichkeit, das zu dem Skript hinzuzufügen? Unten ist das Skript. Wenn nicht, kann ich es anders machen?SQL-Job zu Rohr getrennt

SELECT Distinct 
    (SELECT REPLACE(CONVERT(VARCHAR(10),PatientDemographics.DateofBirth,101),'/','')) as DOB 
    , (SELECT REPLACE(CONVERT(VARCHAR(10),ScheduleEntry.ScheduleDate,101),'/','')) as DateofService 
    , RTRIM(LTRIM(Insurances.EligibilityPayorNumber)) as InsurancePayorCode 
    , RTRIM(LTRIM(ContractFacilityProviders.NPI)) as ProviderID 
    , RTRIM(LTRIM(PatientInsuranceProfiles.Insurance1PolicyNumber)) as SubscriberInsuranceID 
    , RTRIM(LTRIM(PatientInsuranceProfiles.Insurance1PolicyGroupNumber)) as SubscriberGroupNumber 
    , RTRIM(LTRIM(PatientDemographics.firstname)) as SubscriberFirstName 
    , RTRIM(LTRIM(PatientDemographics.MiddleInitial)) as SubscriberMiddleInitial 
    , RTRIM(LTRIM(PatientDemographics.Lastname)) as SubscriberLastName 
FROM 
    ScheduleEntry 
LEFT JOIN 
    PatientDemographics ON ScheduleEntry.PatientAccount = PatientDemographics.AccountNumber 
LEFT JOIN 
    Providers ON ScheduleEntry.ResourceCode = Providers.MedStarProviderIdentifier 
LEFT JOIN 
    Facilities ON ScheduleEntry.FacilityCode = Facilities.MedStarFacilityIdentifier 
LEFT JOIN 
    AddedResource ON ScheduleEntry.ResourceCode = AddedResource.AddedResourceCode 
LEFT JOIN 
    Caregiver ON ScheduleEntry.ResourceCode = Caregiver.CaregiverCode 
LEFT JOIN 
    PatientInsuranceProfiles ON ScheduleEntry.PatientAccount = PatientInsuranceProfiles.PatientAccountNumber 
LEFT JOIN 
    Insurances ON PatientInsuranceProfiles.Insurance1Mnemonic = Insurances.Mnemonic 
LEFT JOIN 
    ContractFacilityProviders ON PatientDemographics.PrimaryPhysician = ContractFacilityProviders.ProviderIdentifier 
WHERE 
    ScheduleEntry.ScheduleDate >= getdate() 
    AND ScheduleEntry.ScheduleDate <= getDate() + .50 
    AND PatientInsuranceProfiles.Insurance1ContractIdentifier = ContractFacilityProviders.ContractIdentifier 
    AND PatientinsuranceProfiles.ActiveFlag = 1 
    AND EligibilityPayorNumber > 1 
    AND ContractFacilityProviders.NPI > 1 
ORDER BY 
    SubscriberLastName 
+2

HINWEIS zu schreiben: Ihre Anfrage tun, ist nicht das, was Sie denken, es tut. Indem Sie die rechten Tabellen eines 'LEFT JOIN' in die' WHERE'-Klausel aufnehmen, verwandeln Sie Ihren 'LEFT JOIN' effektiv in einen' INNER JOIN'. – Siyual

+0

@siyaul Es gibt mir die Ergebnisse, die ich will, aber –

+0

Haben Sie etwas recherchiert? Versucht Google die Lösung? Außerdem möchten die Leute möglicherweise keine Antwort beisteuern, da es in Ihrer Geschichte scheint, dass Sie Antworten nicht als akzeptierte Antworten markieren. – dfundako

Antwort

0

Mehrere Ideen

1) ein SSIS-Paket in eine flache Datei zu exportieren, das Rohr als Trennzeichen verwendet. 2) Verwenden Sie BCP wie bereits angegeben 3) Verwenden Sie sqlcmd, um das Ergebnis auszugeben

SSIS wird eine nette Lösung für einen SQL-Auftrag sein.

Ich würde Echo auch die früheren Plakaten, die Überprüfung vorgeschlagen, dass Ihr nicht die Auswirkungen der linken Seite, indem Sie die Tabellen in der Klausel where

Joins
0

Sie mit etwas xp_cmdshell kann wie ....

SELECT DISTINCT 
--your columns 
INTO ##PIPE_FILE 
FROM YourTables 
INNER JOIN YourOtherTables 


EXECUTE master.dbo.xp_cmdshell 
'bcp "SELECT * FROM ##PIPE_FILE " queryout C:\Folder\Pipes.txt -t"|" -c -T ' 
+0

Kann dies als SQL-Job erledigt werden? –

+0

Ja als TSQL-Skript in einem Agentenjob – scsimon

0

EDIT werden negiert: Wenn Sie nicht haben, Zugang zu xp_cmdshell (viele DBAs diese ausschalten)

Im folgenden werden die Ergebnisse der #TempPipe nehmen und sie dynamisch als Rohr speichern begrenzt (mit einem Header - optional) auf die gewünschte l Ortung.

Nun benötigen Sie die unten aufgeführte gespeicherte Prozedur zusammen mit den entsprechenden Schreibvorgängen.

-- Assumes your query will be saved to #TempPipe 
Select * Into #TempPipe from OD 

-- Set Destination File 
Declare @Destination varchar(250) = 'C:\Working\Test_Pipe.txt' 

-- Construct Field Name and Header from #TempPipe 
Declare @Header varchar(max) = '>>>' 
Select @Header = @Header +']|['+Name from (select * from tempdb.sys.columns where object_id = object_id('tempdb..#TempPipe')) A Order by column_id 
Select @Header = Replace(@Header,'>>>]|','')+']' 

Declare @SelectHead varchar(max) = 'Select Pipe=cast(Replace(Replace('''[email protected]+''',''['',''''),'']'','''') as varchar(max)) ' 
Declare @SelectData varchar(max) = 'Select Pipe=cast(concat('+Replace(@Header,'|',',''|'',')+') as varchar(max)) from #TempPipe ' 
--If Version<2012 Declare @SelectData varchar(max) = 'Select Pipe=cast(cast('+Replace(@Header,'|',' as varchar(500))+''|''+cast(')+' as varchar(500)) as varchar(max)) from #TempPipe ' 

Declare @SQL varchar(max) =' 
Declare @String varchar(max) = ''''; 
Select @String = @String + Pipe + char(13)+char(10) From ('[email protected]+' Union All '[email protected]+') A 

Exec [dbo].[prc-Write-To-File] @String, ''' + @Destination +''' 
' 
--Select @SQL 
Exec(@SQL) 

Die gespeicherte Prozedur beliebige Zeichenfolge auf jede Datei

EXEC sp_configure 'show advanced options', 1 
GO 
EXEC sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO 

CREATE Procedure [dbo].[prc-Write-To-File] (@text as Varchar(Max), @Filename Varchar(200)) AS 
Begin 
    Declare @Object int,@rc int,@FileID Int 

    EXEC @rc = sp_OACreate 'Scripting.FileSystemObject', @Object OUT 
    EXEC @rc = sp_OAMethod @Object , 'OpenTextFile' , @FileID OUT , @Filename , 2 , 1 
    Set @text = Replace(Replace(Replace(@text,'&','&'),'<' ,'<'),'>','>') 
    EXEC @rc = sp_OAMethod @FileID , 'WriteLine' , Null , @text 
    Exec @rc = [YourDatabaseName].dbo.sp_OADestroy @FileID 
    Declare @Append bit 
    Select @Append = 0 
    If @rc <> 0 
    Begin 
     Exec @rc = [YourDatabaseName].dbo.sp_OAMethod @Object, 'SaveFile',null,@text ,@Filename,@Append 
    End 
    Exec @rc = [YourDatabaseName].dbo.sp_OADestroy @Object 
End 

kleine Auswahl der Textdatei

erzeugt
ODNr|ODID|ODClass|ODTitle|ODLMUsr|ODLMUTC|ODDeleted 
0|UNDEF|UNDEF|Undefined|2|Apr 5 2016 1:40PM|0 
1|SYSTEM|UNDEF|System|2|Apr 5 2016 1:40PM|0 
2|UNDEF|USER|Cappelletti, John|2|Apr 12 2016 7:04PM|0 
3|UNDEF|UNDEF|Daily Production Summary|2|Apr 14 2016 12:28PM|0