اوبالیت به بو
شنبه 29 تیر 1392, 17:47 عصر
درود بر شما
یک SP دارم که یکسری محساباتی رو انجام می ده. قسمتی وجود دارد که من باید بر اساس یک شرط دو دستور مختلف داشته باشم. به نمونه کد زیر لطفا نگاهی داشته باشید:
If @Date1 <> @Date2
BEGIN
SELECT [Field1], [Field2], [Field3], [Field4]
INTO #tmpTable
FROM Products
WHERE
[Field1] = @Param1 AND
[Field2] <> @Param2 AND
[Field3] = 'Text'
END
Else
BEGIN
SELECT [Field1], [Field2], [Field3], [Field4]
INTO #tmpTable
FROM Products
WHERE
[Field1] = @Param1 AND
[Field2] <> @Param2 AND
[Field3] = 'Text' AND
[Field4] = @Param3
END
اگر دقت کنید در Select دوم فقط در قسمت WHERE یک شرط بیشتر قرار داده شده یعنی Field4 برابر با @Para3. یعنی تنها تفاوت این دو SELECT در همین یک قسمت است.
خطا چیست؟
مساله اینجاست که بنده بدلیل اینکه دو بار از نام #tmpTable در یک Procedure استفاده کردم SQL Server به من خطا می دهد:
Error Msg 2714 There is already an object name '#tmpTable' in the database.
شرح خطا کاملا گویاست.
راه پیشنهاد شده: قبل از Select یک دستور Exec قرار داده شود و کل دستورات در ' ' قرار داده شوند تا به صورت String در نظر گرفته شوند که زیاد جالب نیست.
می خواستم بدونم چه کار باید انجام بدم تا بتونم این مشکل رو رفع کنم؟ آیا خود DBMS گزینه یا Option یی برای این مورد داره که مثلا فعال کنیم تا به این موارد ایراد نگیرد یا خیر؟ یا کلا راه حلی وجود داره؟
یک SP دارم که یکسری محساباتی رو انجام می ده. قسمتی وجود دارد که من باید بر اساس یک شرط دو دستور مختلف داشته باشم. به نمونه کد زیر لطفا نگاهی داشته باشید:
If @Date1 <> @Date2
BEGIN
SELECT [Field1], [Field2], [Field3], [Field4]
INTO #tmpTable
FROM Products
WHERE
[Field1] = @Param1 AND
[Field2] <> @Param2 AND
[Field3] = 'Text'
END
Else
BEGIN
SELECT [Field1], [Field2], [Field3], [Field4]
INTO #tmpTable
FROM Products
WHERE
[Field1] = @Param1 AND
[Field2] <> @Param2 AND
[Field3] = 'Text' AND
[Field4] = @Param3
END
اگر دقت کنید در Select دوم فقط در قسمت WHERE یک شرط بیشتر قرار داده شده یعنی Field4 برابر با @Para3. یعنی تنها تفاوت این دو SELECT در همین یک قسمت است.
خطا چیست؟
مساله اینجاست که بنده بدلیل اینکه دو بار از نام #tmpTable در یک Procedure استفاده کردم SQL Server به من خطا می دهد:
Error Msg 2714 There is already an object name '#tmpTable' in the database.
شرح خطا کاملا گویاست.
راه پیشنهاد شده: قبل از Select یک دستور Exec قرار داده شود و کل دستورات در ' ' قرار داده شوند تا به صورت String در نظر گرفته شوند که زیاد جالب نیست.
می خواستم بدونم چه کار باید انجام بدم تا بتونم این مشکل رو رفع کنم؟ آیا خود DBMS گزینه یا Option یی برای این مورد داره که مثلا فعال کنیم تا به این موارد ایراد نگیرد یا خیر؟ یا کلا راه حلی وجود داره؟