【发布时间】:2021-06-24 11:39:55
【问题描述】:
我想在我的存储过程中运行两个选择查询。目前它只运行一个选择查询,但我希望存储过程运行两个选择查询。我要运行的另一个查询是
Select companyUDIDDescription from companyudid where companyKey=@CompanyKey and isDeleted=0
上面的查询返回一个我想在每次执行这个存储过程时使用的列。
CREATE OR ALTER PROCEDURE [dbo].[GetFilteredUsers]
(
@Sitekey AS INT,
@CompanyKey AS INT,
@FilterType AS SMALLINT,
@FiterValue VARCHAR(25))
AS
BEGIN
SELECT userKey
INTO #TempUsersTable
FROM Vault..[User]
WHERE IsDeleted=0 and siteKey=@Sitekey and companyKey=@CompanyKey
-- ----------------------------------------------------------------Filter based on udid value------------------------------------------------------------------------
IF(@FilterType) =1 --udid
BEGIN
SELECT AUX.userUDIDValue,
AUX.userKey,AUX.userLogin,AUX.userCreated,AUX.userFirstName,AUX.userLastName,AUX.userGender,
AUX.userBirthdate,AUX.Usertitle,AUX.cellphone,AUX.homephone,AUX.fax,
AUX.emergencycontact,AUX.useremail,AUX.emergencyContactRelation,AUX.emergencyPhoneNo1,AUX.emergencyPhoneNo2,
AUX.firstPassportName,AUX.firstPassportNo,AUX.firstPassportExpirationDate,
AUX.firstPassportIssuingCountry,AUX.redressNumber,AUX.redressNumber2,AUX.secondPassportExpirationDate,
AUX.secondPassportIssuingCountry,AUX.secondPassportname,AUX.ApproverEmail,
AUX.originAirportCode, AUX.airSeatingName,AUX.airMealName,
AUX.hotelSmokingPreference,
AUX.hotelBedPreference,
AUX.carVehicleTypeKey,
AUX.addressLine1,AUX.addressLine2,AUX.countryCode,AUX.stateCode,AUX.zip ,Aux.city,Aux.groupName
FROM ( SELECT (SELECT DISTINCT SUBSTRING(
(
SELECT '|'+ST1.userUDIDValue AS [text()]
FROM Vault.dbo.userudid ST1
WHERE ST1.userkey = ST2.userkey
ORDER BY ST1.userkey
FOR XML PATH ('')
), 2, 1000) [Students]
FROM Vault.dbo.userudid ST2
WHERE ST2.userkey = T.userkey
) AS userUDIDValue,
t.userKey,us.userLogin,us.userCreated,us.userFirstName,us.userLastName,us.userGender,us.userBirthdate,
p.Usertitle,p.cellphone,p.homephone,p.fax,
p.emergencycontact,p.useremail,p.emergencyContactRelation,p.emergencyPhoneNo1,p.emergencyPhoneNo2,p.firstPassportName,
p.firstPassportNo,p.firstPassportExpirationDate,
p.firstPassportIssuingCountry,p.redressNumber,p.redressNumber2,p.secondPassportExpirationDate, p.secondPassportIssuingCountry,
p.secondPassportname,p.ApproverEmail,a.originAirportCode,asl.airSeatingName,aml.airMealName,hsl.hotelSmokingPreference,
hbl.hotelBedPreference,c.carVehicleTypeKey,ad.addressLine1,ad.addressLine2,ad.city,ad.countryCode,ad.stateCode,ad.zip,g.groupName
FROM #TempUsersTable t
INNER JOIN [user] us ON t.userkey = us.userkey
INNER JOIN UserProfile p ON t.userkey = p.userkey
LEFT OUTER JOIN AirPreference a ON t.userkey = a.userkey
LEFT OUTER JOIN AirSeatingLookup asl ON a.airSeatingKey=asl.airSeatingKey
LEFT OUTER JOIN AirMealLookup aml ON a.airMealKey=aml.airMealKey
LEFT OUTER JOIN HotelPreference h ON t.userkey = h.userkey AND h.hotelPreferenceKey = (SELECT MAX(hotelPreferenceKey) FROM HotelPreference WHERE userKey = t.userKey)
LEFT OUTER JOIN HotelSmokingLookup hsl ON h.hotelSmokingKey=hsl.hotelSmokingKey
LEFT OUTER JOIN HotelBedLookup hbl ON h.hotelBedKey=hbl.hotelBedKey
LEFT OUTER JOIN CarPreference c ON t.userkey = c.userkey
LEFT OUTER JOIN ADDRESS ad ON p.workAddressKey=ad.addressKey
LEFT OUTER JOIN [GroupMembers] gm ON us.userKey=gm.groupMemberTableKey
LEFT OUTER JOIN [Group] g ON gm.groupKey=g.groupKey
) AUX
WHERE AUX.userUDIDValue LIKE '%'+@FiterValue+'%' -- UDid text
END
【问题讨论】:
-
如果我在你的团队中看到了
Select * from,我会建议你把特定的列都放在星号中 -
哦,我把*放错了,修正了错误
-
请注意,您的
@FiterValue容易受到 sql 注入的影响,因此我希望它已被清理,而不是直接来自用户。
标签: sql sql-server stored-procedures