【发布时间】:2017-05-12 12:20:58
【问题描述】:
这是我的存储过程,它在 MSSQL 2005 速成版中运行良好,但在我要迁移的 MSSQl 2014 速成版中没有执行,即文件在那里但只有 0 个字节! 调用过程的cmd文件代码为:
cd C:\NI_SQLscripts
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE" -S ATLOCATION-P-VM -E -d BazneStanice -b -Q Svi_NI -o Rezultat.txt
程序是:
USE [BazneStanice]
GO
/****** Object: StoredProcedure [dbo].[Svi_NI] Script Date: 5/11/2017 4:32:25 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Svi_NI]
as
Declare @xmlsvi xml;
Declare @strsvi nvarchar(4000);
Declare @cmdsvi nvarchar(4000);
Declare @dan nvarchar(20);
Declare @sat nvarchar(20);
truncate table Upiti_NI_XML;
Set @xmlsvi=
(select
LOKime as Name,
sifra0 as Location_Code,
adresa as Address,
Gsirina as Coordinate_WGS84_Latitude,
Gduzina as Coordinate_WGS84_Longitude,
opstina as Municipality,
odrzava0 as Maintance,
grozd as cluster,
dolazak as Access_info_and_contact,
kolokacija as colocation,
vlasnik as Owner,
druginazivi as Alias,
zemlja as Country,
vaznostbs as PriorityBS,
vaznostpr as PriorityTransport,
napomena0 as Description
from lokacije where stanje='koriscenje'
FOR XML PATH ('Location'), ROOT ('Locations'), ELEMENTS);
Set @dan=(SELECT convert(varchar, getdate(), 112));
Set @sat=(select replace(Convert (varchar(8),GetDate(), 108),':',''));
insert into Upiti_NI_XML (upit, ime_upita, dan, sat) values (@xmlsvi, 'locations_NI', @dan, @sat );
Set @strsvi= 'select upit from [BazneStanice].[dbo].Upiti_NI_XML where ime_upita=' + '''locations_NI''';
Set @cmdsvi='bcp "' + @strsvi + '"' + ' queryout "C:\NI_Location_Data\locations.xml" -T -c -S "ATLOCATION-P-VM"';
exec xp_cmdshell @cmdsvi;
当我在 SQL Server 存储过程 Svi_NI 上“手动”执行没有“更改过程”部分的情况下,一切正常。我在安装在同一台服务器上的 Sybase 客户端中重命名了 bcp.exe 我在这里缺少什么?任何帮助将不胜感激!
【问题讨论】:
-
你在执行什么?
ALTER和它有什么关系?执行意味着你写EXEC [dbo].[Svi_NI]。 SQL Server 2005 也是如此。您发布的是存储过程的定义,而不是执行脚本。 -
至于可能出了什么问题,那个存储过程做了很多非常丑陋的事情,比如用连接创建i语句和运行
cmd语句。 非常很容易出错,例如错过引号或斜线。出于安全原因,cmd默认也是禁用的。 -
是的,我知道那部分有点难看,但它可以在旧服务器上运行,我只是将它复制到新服务器上,所以缺少报价不会是问题。 Svi_NI 是存储过程,当我必须修改过程时,我只需执行它。
-
当然可以。改变的是服务器和帐户。可能还有数据。语言没变。在 SSMS 中调试存储过程以查看每个语句发生了什么以及最终变量是什么。有意义吗?
-
等待 - `我已在已安装的 Sybase 客户端中重命名了 bcp.exe` 是什么意思? Sybase 和 SQL Server 有什么关系????
标签: sql-server stored-procedures sql-server-2005 sql-server-2014 bcp