Sql 如何在存储过程中传递常量值
我在存储过程中有以下语句:Sql 如何在存储过程中传递常量值,sql,Sql,我在存储过程中有以下语句: INSERT INTO @tblThreatenedSpeciesSubzone (ThreatenedSpeciesZoneID, ManagementZoneID, VegetationZoneID) SELECT * FROM OPENXML (@hDoc, '/NewDataSet/tblThreatenedSpeciesSubzone
INSERT INTO @tblThreatenedSpeciesSubzone
(ThreatenedSpeciesZoneID,
ManagementZoneID,
VegetationZoneID)
SELECT *
FROM OPENXML (@hDoc, '/NewDataSet/tblThreatenedSpeciesSubzone', 2)
WITH (ThreatenedSpeciesZoneID INT,
ManagementZoneID INT,
VegetationZoneID INT) XMLDATA
WHERE VegetationZoneID = @VegetationZoneIDInXML
有时“managementZone id”变为null,我想替换它,如果它为null,那么我想传递常量值“0”。有办法吗?不确定“传递常量值”,但您可以始终设置默认值:
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = 'Andersson' -- default value
AS
因此:
您可以在select语句中使用合并
INSERT INTO @tblThreatenedSpeciesSubzone
( ThreatenedSpeciesZoneID ,
ManagementZoneID ,
VegetationZoneID
)
SELECT
ThreatenedSpeciesZoneID ,
COALESCE(ManagementZoneID,0) ,
VegetationZoneID
FROM OPENXML (@hDoc, '/NewDataSet/tblThreatenedSpeciesSubzone', 2)
WITH ( ThreatenedSpeciesZoneID INT ,
ManagementZoneID INT ,
VegetationZoneID INT ) XMLDATA
WHERE VegetationZoneID = @VegetationZoneIDInXML
无法在我的存储过程中执行此操作,我在存储过程中有带和不带管理id的条件,因此我可能有一些timeOk值。是否可以使用显式选择而不是*?如果是这样的话,您可以使用ISNULL()谢谢Mackan,我从前端而不是后端处理这个问题来解决这个问题这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
、postgresql
、sqlserver
、oracle
还是db2
——或者其他完全不同的东西。
INSERT INTO @tblThreatenedSpeciesSubzone
( ThreatenedSpeciesZoneID ,
ManagementZoneID ,
VegetationZoneID
)
SELECT
ThreatenedSpeciesZoneID ,
COALESCE(ManagementZoneID,0) ,
VegetationZoneID
FROM OPENXML (@hDoc, '/NewDataSet/tblThreatenedSpeciesSubzone', 2)
WITH ( ThreatenedSpeciesZoneID INT ,
ManagementZoneID INT ,
VegetationZoneID INT ) XMLDATA
WHERE VegetationZoneID = @VegetationZoneIDInXML