У меня есть рабочая хранимая процедура, которая создает файл на основе 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