如何在sql Server上保存sql语句
我试图在SQLServer上保存我的SQL语句,而不是将其键入我的C代码中。我的问题是这个SQL语句应该保存为什么?我曾尝试将其保存为表值函数和存储过程,但失败了。是否有其他方法将其保存到SQL Server中 我的声明如下:如何在sql Server上保存sql语句,sql,sql-server,function,stored-procedures,Sql,Sql Server,Function,Stored Procedures,我试图在SQLServer上保存我的SQL语句,而不是将其键入我的C代码中。我的问题是这个SQL语句应该保存为什么?我曾尝试将其保存为表值函数和存储过程,但失败了。是否有其他方法将其保存到SQL Server中 我的声明如下: DECLARE @PickupDate datetime DECLARE @SendingID int DECLARE @PickupCountryID int, @PickupPostalID int, @PickupStreetID int, @PickupAdrI
DECLARE @PickupDate datetime
DECLARE @SendingID int
DECLARE @PickupCountryID int, @PickupPostalID int, @PickupStreetID int, @PickupAdrID int;
DECLARE @DeliveryCountryID int, @DeliveryPostalID int, @DeliveryStreetID int, @DeliveryAdrID int, @PickupType varchar(2)
DECLARE @RouteID int, @RoutePartNo int
DECLARE @weekday varchar(50)
DECLARE caclulate_pickup_route CURSOR FOR
SELECT
SendingID,
PickupPostal.CountryID,
PickupStreet.PostalID,
PickupAdr.StreetID,
PickupAdrID,
PickupDate,
PickupType,
DeliveryPostal.CountryID,
DeliveryStreet.PostalID,
DeliveryAdr.StreetID,
DeliveryAdrID
FROM Sending
INNER JOIN Adr AS PickupAdr ON PickupAdrID=PickupAdr.AdrID
INNER JOIN Street AS PickupStreet ON PickupAdr.StreetID=PickupStreet.StreetID
INNER JOIN Postal AS PickupPostal ON PickupStreet.PostalID=PickupPostal.PostalID
INNER JOIN Adr AS DeliveryAdr ON DeliveryAdrID=DeliveryAdr.AdrID
INNER JOIN Street AS DeliveryStreet ON DeliveryAdr.StreetID=DeliveryStreet.StreetID
INNER JOIN Postal AS DeliveryPostal ON DeliveryStreet.PostalID=DeliveryPostal.PostalID
WHERE PickupRouteID=0 --and DeliveryDate = '2013-07-31' and DeliveryType = 'N'
OPEN caclulate_pickup_route
FETCH NEXT FROM caclulate_pickup_route INTO @SendingID, @PickupCountryID,@PickupPostalID, @PickupStreetID, @PickupAdrID, @PickupDate, @PickupType,
@DeliveryCountryID, @DeliveryPostalID, @DeliveryStreetID, @DeliveryAdrID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @weekday = DATENAME(weekday, dateadd(day,-1, @PickupDate))
SELECT @RouteID = RouteID, @RoutepartNo = RoutePartNo FROM RoutePartPart AS RoutePartPart WHERE
PickupAreaGrpID IN (SELECT AreaGrpID AS PickupAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@PickupCountryID OR PostalID=@PickupPostalID OR (PostalID IN
(SELECT PostalID FROM Postal WHERE
Postal<=(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID) AND
CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=(SELECT Postal FROM Postal WHERE
PostalID=@PickupPostalID) AND CountryID=(SELECT CountryID FROM Postal WHERE
PostalID=@PickupPostalID))) OR StreetID=@PickupStreetID OR AdrID=@PickupAdrID) AND DenyType=0) AND
PickupAreaGrpID NOT IN
(SELECT AreaGrpID AS PickupAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@PickupCountryID OR PostalID=@PickupPostalID OR (PostalID IN
(SELECT PostalID FROM Postal WHERE Postal<=(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID) AND
CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID) AND
CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID))) OR StreetID=@PickupStreetID OR AdrID=@PickupAdrID) AND DenyType=1) AND
DeliveryAreaGrpID IN
(SELECT AreaGrpID AS DeliveryAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@DeliveryCountryID OR PostalID=@DeliveryPostalID OR (PostalID IN
(SELECT PostalID FROM Postal WHERE Postal<=(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID) AND
CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID)) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID) AND
CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID))) OR StreetID=@DeliveryStreetID OR AdrID=@DeliveryAdrID) AND DenyType=0) AND
DeliveryAreaGrpID NOT IN
(SELECT AreaGrpID AS DeliveryAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@DeliveryCountryID OR PostalID=@DeliveryPostalID OR (PostalID IN (SELECT PostalID FROM Postal WHERE
Postal<=(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID) AND CountryID=(SELECT CountryID FROM Postal WHERE
PostalID=@DeliveryPostalID)) AND PostalIDto IN (SELECT PostalID FROM Postal WHERE Postal>=(SELECT Postal FROM Postal WHERE
PostalID=@DeliveryPostalID) AND CountryID=(SELECT CountryID FROM Postal WHERE
PostalID=@DeliveryPostalID))) OR StreetID=@DeliveryStreetID OR AdrID=@DeliveryAdrID) AND DenyType=1) AND
Pickup=1 AND(
(@weekday = 'Monday' AND [Monday] = 1)
OR (@weekday = 'Tuesday' AND [Tuesday] = 1)
OR (@weekday = 'Wednesday' AND [Wednesday] = 1)
OR (@weekday = 'Thursday' AND [Thursday] = 1)
OR (@weekday = 'Friday' AND [Friday] = 1)
OR (@weekday = 'Saturday' AND [Saturday] = 1)
OR (@weekday = 'Sunday' AND [Sunday] = 1))AND
Types LIKE '%'+@PickupType+'%'
Update Sending SET PickupRouteID=@RouteID, PickupRoutePartNo=@RoutePartNo WHERE SendingID=@SendingID
FETCH NEXT FROM caclulate_pickup_route INTO @SendingID, @PickupCountryID,@PickupPostalID, @PickupStreetID, @PickupAdrID, @PickupDate, @PickupType,
@DeliveryCountryID, @DeliveryPostalID, @DeliveryStreetID, @DeliveryAdrID
END
CLOSE caclulate_pickup_route
DEALLOCATE caclulate_pickup_route
谢谢 在发布问题后,我想出了如何将其保存为存储过程 这是我的存储过程:
USE [database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Calculate_Delivery_Routes]
-- Add the parameters for the stored procedure here
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DeliveryDate datetime
DECLARE @SendingID int
DECLARE @PickupCountryID int, @PickupPostalID int, @PickupStreetID int, @PickupAdrID int;
DECLARE @DeliveryCountryID int, @DeliveryPostalID int, @DeliveryStreetID int, @DeliveryAdrID int, @DeliveryType varchar(2)
DECLARE @RouteID int, @RoutePartNo int
DECLARE @weekday varchar(50)
DECLARE caclulate_delivery_route CURSOR FOR
SELECT
SendingID,
PickupPostal.CountryID,
PickupStreet.PostalID,
PickupAdr.StreetID,
PickupAdrID,
DeliveryDate,
DeliveryType,
DeliveryPostal.CountryID,
DeliveryStreet.PostalID,
DeliveryAdr.StreetID,
DeliveryAdrID
FROM Sending
INNER JOIN Adr AS PickupAdr ON PickupAdrID=PickupAdr.AdrID
INNER JOIN Street AS PickupStreet ON PickupAdr.StreetID=PickupStreet.StreetID
INNER JOIN Postal AS PickupPostal ON PickupStreet.PostalID=PickupPostal.PostalID
INNER JOIN Adr AS DeliveryAdr ON DeliveryAdrID=DeliveryAdr.AdrID
INNER JOIN Street AS DeliveryStreet ON DeliveryAdr.StreetID=DeliveryStreet.StreetID
INNER JOIN Postal AS DeliveryPostal ON DeliveryStreet.PostalID=DeliveryPostal.PostalID
WHERE DeliveryRouteID=0 --and DeliveryDate = '2013-07-31' and DeliveryType = 'N'
OPEN caclulate_delivery_route
FETCH NEXT FROM caclulate_delivery_route INTO @SendingID, @PickupCountryID,@PickupPostalID, @PickupStreetID, @PickupAdrID, @DeliveryDate, @DeliveryType,
@DeliveryCountryID, @DeliveryPostalID, @DeliveryStreetID, @DeliveryAdrID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @weekday = DATENAME(weekday, dateadd(day,-1, @DeliveryDate))
SELECT @RouteID = RouteID, @RoutePartNo = RoutePartNo FROM RoutePartPart AS RoutePartPart WHERE
PickupAreaGrpID IN (
SELECT AreaGrpID AS PickupAreaGrpID FROM AreaGrpSpec
WHERE (CountryID=@PickupCountryID OR PostalID=@PickupPostalID OR (PostalID IN (
SELECT PostalID FROM Postal WHERE Postal<=(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID)
AND CountryID=(
SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)
) AND PostalIDto IN (SELECT PostalID FROM Postal WHERE Postal>=
(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID)
AND CountryID=
(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)
)
) OR StreetID=@PickupStreetID OR AdrID=@PickupAdrID) AND DenyType=0) AND
PickupAreaGrpID NOT IN (SELECT AreaGrpID AS PickupAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@PickupCountryID OR PostalID=@PickupPostalID OR
(PostalID IN
(SELECT PostalID FROM Postal WHERE Postal<=
( SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID)
AND CountryID=
(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)
) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=
(SELECT Postal FROM Postal WHERE PostalID=@PickupPostalID)
AND CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@PickupPostalID)
)
)
OR StreetID=@PickupStreetID OR AdrID=@PickupAdrID) AND DenyType=1) AND
DeliveryAreaGrpID IN
(SELECT AreaGrpID AS DeliveryAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@DeliveryCountryID OR PostalID=@DeliveryPostalID OR
(PostalID IN (SELECT PostalID FROM Postal WHERE Postal<=
(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID)
AND CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID)
) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=
(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID)
AND CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID)
)
) OR StreetID=@DeliveryStreetID OR AdrID=@DeliveryAdrID) AND DenyType=0)
AND DeliveryAreaGrpID NOT IN
(SELECT AreaGrpID AS DeliveryAreaGrpID FROM AreaGrpSpec WHERE
(CountryID=@DeliveryCountryID OR PostalID=@DeliveryPostalID OR
(PostalID IN (SELECT PostalID FROM Postal WHERE Postal<=
(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID)
AND CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID)
) AND PostalIDto IN
(SELECT PostalID FROM Postal WHERE Postal>=
(SELECT Postal FROM Postal WHERE PostalID=@DeliveryPostalID)
AND CountryID=(SELECT CountryID FROM Postal WHERE PostalID=@DeliveryPostalID)
)
) OR StreetID=@DeliveryStreetID OR AdrID=@DeliveryAdrID) AND DenyType=1) AND Delivery=1
AND(
(@weekday = 'Monday' AND [Monday] = 1)
OR (@weekday = 'Tuesday' AND [Tuesday] = 1)
OR (@weekday = 'Wednesday' AND [Wednesday] = 1)
OR (@weekday = 'Thursday' AND [Thursday] = 1)
OR (@weekday = 'Friday' AND [Friday] = 1)
OR (@weekday = 'Saturday' AND [Saturday] = 1)
OR (@weekday = 'Sunday' AND [Sunday] = 1))AND
Types LIKE '%'+@DeliveryType +'%'
UPDATE Sending SET DeliveryRouteID=@RouteID, DeliveryRoutePartNo=@RoutePartNo WHERE SendingID=@SendingID
FETCH NEXT FROM caclulate_delivery_route INTO @SendingID, @PickupCountryID,@PickupPostalID, @PickupStreetID, @PickupAdrID, @DeliveryDate, @DeliveryType,
@DeliveryCountryID, @DeliveryPostalID, @DeliveryStreetID, @DeliveryAdrID
END
CLOSE caclulate_delivery_route
DEALLOCATE caclulate_delivery_route
END
为什么存储过程不工作?上面写着什么?是的,我看不出有什么理由不把它作为一个SP@Lahib使用存储过程时必须考虑重写此代码。这是错误的,因为有很多原因。我在发帖后发现了我的问题。我现在已经开始工作了。对不起,伙计们!如果要重写代码并另存为SP,则应借此机会删除光标并替换为单个UPDATE语句。你似乎也有很多无关的选择。我很感激您最初没有编写这段代码,但为什么不让它更具性能和可维护性。@SteveFord,但我删除了光标,我如何更新多行??我对我的老板说了同样的话,他说没有必要对它进行优化:\n看一下来自。。。看一下这里的一些示例,包括带有通用表表达式的示例