Когда я использую «>» Больше, чем символ в команде BCP, функция не работает - PullRequest
0 голосов
/ 14 мая 2019

У меня есть рабочая хранимая процедура, которая создает файл на основе SQL QUERY

Когда я запускаю SP, это результат, который у меня есть

    NULL
    Starting copy...
    SQLState = S1000, NativeError = 0
    Error = [Microsoft][ODBC Driver 13 for SQL Server]Warning: BCP import                 with a format file will convert empty strings in delimited columns to NULL.
    NULL
    21 rows copied.
    Network packet size (bytes): 4096
    Clock Time (ms.) Total     : 1      Average : (21000.00 rows per sec.)
    NULL

И файл успешно создан

Теперь я хотел изменить SP, и единственное, что я изменил, - это знак = на знак> 1008 *

здесь От этого

     where art.bitInactivo=0  and datediff(day,art.Dtmalteracao, getdate())=5

к этому

    where art.bitInactivo=0  and datediff(day,art.Dtmalteracao, getdate())>5    

или даже с этим

    where art.bitInactivo=0  and datediff(day,art.Dtmalteracao, getdate())<5  

И теперь он выдает мне NULL в выводе

Я пришел к выводу, что знак «меньше» и «больше чем» должен что-то делать в самой команде ППГ.

Но я гуглил и не вижу, чтобы никто не жаловался на это, только избегая одиночных кавычек, ничего больше.

полная строка здесь. Знак находится ближе к концу пункта where

    SET @bcpCommand = 'bcp "select ''192.168.1.60'',1,art.strCodigo,left(replace(replace(replace(art.strDescricao,''\"'',''''),char(147),''''),char(148),''''),40),replace(art.CA_NomeCient,char(0),''''),''0,00'',''0,00'',''0,00'',''0,00'',''0,00'',art.strAbrevMedVnd,''1'',artfam.strCodFamilia,art.strCodBarras,null,art.ca_exportabalanca,0,0,0,0,0,art.ca_etiquetadef,art.CA_numeradorbalanca,0,0,0,''0,000'',''0,00'',replace(isnull(ca_qtddef,0.00),''.'','',''),''0,000'',''0,000'',''0,000'',''0,00'' from Emp_002.dbo.Tbl_Gce_Artigos art with(NOLOCK) left outer JOIN Emp_002.dbo.Tbl_Gce_ArtigosFamilias artfam with(NOLOCK) on artfam.strCodArtigo=art.strCodigo and artfam.strCodTpNivel=''1'' where art.bitInactivo=0  and datediff(day,art.Dtmalteracao, getdate())>5  " queryout '

Если вам нужен полный SP, то здесь

    USE [Emp_002]
    GO
    /****** Object:  StoredProcedure [dbo].[usr_geraficheiro]    Script Date: 14/05/2019 10:08:45 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[usr_geraficheiro]
    AS
    declare @prevAdvancedOptions int
    declare @prevXpCmdshell int

    select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
    select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

    if (@prevAdvancedOptions = 0)
    begin
        exec sp_configure 'show advanced options', 1
        reconfigure
    end

    if (@prevXpCmdshell = 0)
    begin
        exec sp_configure 'xp_cmdshell', 1
        reconfigure
    end

    /* do work */
    DECLARE @OutputFile NVARCHAR(100) ,    @FilePath NVARCHAR(100) ,    @bcpCommand NVARCHAR(1500)

    SET @bcpCommand = 'bcp "select ''192.168.1.60'',1,art.strCodigo,left(replace(replace(replace(art.strDescricao,''\"'',''''),char(147),''''),char(148),''''),40),replace(art.CA_NomeCient,char(0),''''),''0,00'',''0,00'',''0,00'',''0,00'',''0,        00'',art.strAbrevMedVnd,''1'',artfam.strCodFamilia,art.strCodBarras,null,art.ca_exportabalanca,0,0,0,0,0,art.ca_etiquetadef,art.CA_numeradorbalanca,0,0,0,''0,000'',''0,00'',replace(isnull(ca_qtddef,0.00),''.'','',''),''0,000'',''0,000'',''0        ,000'',''0,00'' from Emp_002.dbo.Tbl_Gce_Artigos art with(NOLOCK) left outer JOIN Emp_002.dbo.Tbl_Gce_ArtigosFamilias artfam with(NOLOCK) on artfam.strCodArtigo=art.strCodigo and artfam.strCodTpNivel=''1'' where art.bitInactivo=0  and         datediff(day,art.Dtmalteracao, getdate())>5  " queryout '
    SET @FilePath = 'C:\compussql\ExportBalanca\'
    SET @OutputFile = 'artigos.txt'
    SET @bcpCommand = @bcpCommand + @FilePath + @OutputFile + ' -c -C 65001 -t; -T -S '+ @@servername
    exec master..xp_cmdshell @bcpCommand

    SET @bcpCommand = 'bcp "Select ''D1'' " queryout '
    SET @FilePath = 'C:\compussql\ExportBalanca\'
    SET @OutputFile = 'BMLink.ctl'
    SET @bcpCommand = @bcpCommand + @FilePath + @OutputFile + ' -c -C 65001 -t; -T -S '+ @@servername
    exec master..xp_cmdshell @bcpCommand

    SET @bcpCommand = 'bcp "Select ''192.168.1.60'', 1, art.CA_numeradorbalanca, null, art.ca_zonacap, null from Emp_002.dbo.Tbl_Gce_Artigos art WITH(NOLOCK) where art.bitInactivo=0 and datediff(DAY,dtmAlteracao, getdate())<5" queryout '
    SET @FilePath = 'C:\compussql\ExportBalanca\'
    SET @OutputFile = 'ingredientes.txt'
    SET @bcpCommand = @bcpCommand + @FilePath + @OutputFile + ' -c -C 65001 -t; -T -S '+ @@servername
    exec master..xp_cmdshell @bcpCommand





    if (@prevXpCmdshell = 0)
    begin
        exec sp_configure 'xp_cmdshell', 0
        reconfigure
    end

    if (@prevAdvancedOptions = 0)
    begin
        exec sp_configure 'show advanced options', 0
        reconfigure
    end
...