2
我有這個存儲過程,它從4個表中抽取數據並將它們排列爲4列,但我需要一個具有相同結果(當然沒有參數)的視圖。這可能嗎?我知道我不能在視圖中使用臨時表,任何解決方案?!如何將存儲過程轉換爲視圖?
ALTER PROC pr_GetChildrenByPersonID
@pePersonIDs varchar(8000)
AS
SELECT
*,
RANK() OVER (PARTITION BY pbsPersonID ORDER BY psbPersonSiblingID ASC) AS CustomRank
INTO
#TempPersonSibling
FROM
PersonSibling
WHERE
pbsSiblingTypeID = 2
AND pbsPersonID IN (SELECT item
FROM dbo.fn_ParseStrListIdentity(@pePersonIDs, ','))
SELECT
pePersonID,
ISNULL((SELECT pbsName
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 1), '') AS ChildrenName1,
ISNULL((SELECT pbsAge
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 1), '') AS ChildrenAge1,
ISNULL((SELECT dbo.fn_GetCountry(pbsPlaceOfBirth)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 1), '') AS ChildrenCountryOfBirth1,
ISNULL((SELECT dbo.fn_GetCountry(pbsPresentStay)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 1), '') AS ChildrenCountryOfResidence1,
ISNULL((SELECT pbsName
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 2), '') AS ChildrenName2,
ISNULL((SELECT pbsAge
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 2), '') AS ChildrenAge2,
ISNULL((SELECT dbo.fn_GetCountry(pbsPlaceOfBirth)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 2), '') AS ChildrenCountryOfBirth2,
ISNULL((SELECT dbo.fn_GetCountry(pbsPresentStay)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 2), '') AS ChildrenCountryOfResidence2,
ISNULL((SELECT pbsName
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 3), '') AS ChildrenName3,
ISNULL((SELECT pbsAge
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 3), '') AS ChildrenAge3,
ISNULL((SELECT dbo.fn_GetCountry(pbsPlaceOfBirth)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 3), '') AS ChildrenCountryOfBirth3,
ISNULL((SELECT dbo.fn_GetCountry(pbsPresentStay)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 3), '') AS ChildrenCountryOfResidence3,
ISNULL((SELECT pbsName
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 4), '') AS ChildrenName4,
ISNULL((SELECT pbsAge
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 4), '') AS ChildrenAge4,
ISNULL((SELECT dbo.fn_GetCountry(pbsPlaceOfBirth)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 4), '') AS ChildrenCountryOfBirth4,
ISNULL((SELECT dbo.fn_GetCountry(pbsPresentStay)
FROM #TempPersonSibling
WHERE pbsSiblingTypeID = 2
AND pbsPersonID = pepersonID
AND CustomRank = 4), '') AS ChildrenCountryOfResidence4
FROM
Person
WHERE
pePersonID IN (SELECT item
FROM dbo.fn_ParseStrListIdentity(@pePersonIDs, ','))
1)從不使用SELECT *,因爲表格可能會更改。 2)你是否要求創建視圖的語法? 3)這個過程對於你的select語句中的初學者和子查詢來說是可怕的,就像這是hideos。 4)創建一個表來存儲這個信息,如果這是經常使用,你會節省性能。 –