PDA

View Full Version : مشکل در ساخت جدول در SP و استفاد از EXEC



white fox
چهارشنبه 17 اسفند 1384, 11:52 صبح
با سلام دوستان....
من کد زیر رو نوشتم در واقع من قصد دارم با این کد اطلاعاتی رو از جدولی بگیرم و یک جدول دیگه درست کنم که نام اون جدول به صورت پارامتری گرفته میشود.
که با دستور EXEC اون جدول ساخته میشود.
و بعد یک ستون به اون جدول اضافه میشه که در آخر بر اساس اون ستون قراره که من دستور SELECT قرار است اجرا شود.
اما عجیب اینجاست که وقتی در دستور SELECT از * استفاده میشود ستون اضافه شده نمایش داده میشود اما اگر از نام اون ستون در دستور WHERE استفاده شود آن ستون را نمیشناسد.
من کد رو در زیر میارم دقت کنید اگر مشکل من رو حل کنید و راهنمائیم کنید ممنون میشم.



CREATE PROCEDURE Custom_Paging
(
@CurrentPage int,
@PageSize int,
@Table_Name nvarchar(50),
@TotalRecords int OUTPUT
)
AS
-- Turn off count return.
Set NoCount On

-- Declare variables.
Declare @FirstRec int
Declare @LastRec int

-- Initialize variables.
Set @FirstRec = (@CurrentPage - 1) * @PageSize
Set @LastRec = (@CurrentPage * @PageSize + 1)

-- Create a temp table to hold the current page of data
-- Add an ID column to count the records
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TempCustom]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TempCustom]
EXEC('SELECT * INTO TempCustom FROM ' + @Table_Name)
if @@ERROR = 0
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TempCustom]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE TempCustom ADD TTID Bigint IDENTITY (1, 1) PRIMARY KEY

--Complete Proc Return Tables and TotalRow Count
SELECT @TotalRecords = COUNT(*) FROM TempCustom
SELECT * FROM TempCustom WHERE TTID > @FirstRec AND TTID < @LastRec
END


یک نکته دیگر اینکه وقتی با دستور EXEC طبق کد بالا اگر بخواهم جدول را از نوع موقتی بسازم به محض ساخته شدن جدول از بین میرود و گد دیگر جدول موقتی را اصلا تشخیص نمیدهد.
اشکال از کجاست؟
با تشکر از راهنمایی شما.

white fox
چهارشنبه 17 اسفند 1384, 22:14 عصر
خوب خودم یافتم جوابو
میگم که شاید بعضی ها ندونند بفهمن
در یک SP که جدولی دستکاری میشه نمیشه از نتایج دستکاری در اون جدول در همون دسته فایل نمیشه استفاده کرد...
و من مجبور شدم این پروسیجرو بشکنم و دو تاش کنم....
======================================
الان چند دفعه هست که برام مشکلی پیش میاد میرم چند روز خودم دنبالش میگردم وقتی پیداش نمیکنم میام میپرسم و به محض اینکه میپرسم خودم جوابشو پیدا میکنم...خیلی باحاله ها!!!!

AminSobati
پنج شنبه 18 اسفند 1384, 21:36 عصر
انجام این کار در SQL Server 2000 همونطور که میدونید پر زحمت هستش، اگر احیانا در SQL Server 2005 قصد انجام این کار رو داشتید، از ROW_NUMBER استفاده کنید

Kamyar.Kimiyabeigi
شنبه 20 اسفند 1384, 08:52 صبح
با اجازه استاد عزبز آقای ثباتی
در ضمن شما وقتی در sp یک temp table میسازید زمانی که exec میکنید session شما بسته میشه و در اصل دیگه به اون temo table دسترسی ندارید
موفق باشید

rmb_ali
سه شنبه 23 اسفند 1384, 09:25 صبح
خوب خودم یافتم جوابو
میگم که شاید بعضی ها ندونند بفهمن
در یک SP که جدولی دستکاری میشه نمیشه از نتایج دستکاری در اون جدول در همون دسته فایل نمیشه استفاده کرد...
و من مجبور شدم این پروسیجرو بشکنم و دو تاش کنم....
======================================
الان چند دفعه هست که برام مشکلی پیش میاد میرم چند روز خودم دنبالش میگردم وقتی پیداش نمیکنم میام میپرسم و به محض اینکه میپرسم خودم جوابشو پیدا میکنم...خیلی باحاله ها!!!!
میدونی چرا ؟
به خاطر اینکه پیدا کردن جواب یه سوال 10 درصد کل کاره و 90 درصد بقیه طرح کردن درست سواله و چون شما سوالتون رو در اینجا مینویسید در حقیقت مو به مو اونو تحلیل میکنید تا دیگران بفهمند وقتی اینجوری میشه و بدلیل اینکه مغز شما و ناخودآگاه شما هم درگیر این مسئله بوده و با این کار دقیقا به خودتون کمک میکنید که این پازل به درستی کنار هم چیده بشه