PDA

View Full Version : ایجاد جدول موقت



رامین مرادی
شنبه 27 خرداد 1396, 13:45 عصر
سلام دوستان من بنا به دلایلی نیاز داشتم یک کوئری به شکل زیر بنویسم
اما خودم میدونم درست نیست و نیاز دارم اصلاحش کنم ممنون میشم راهنماییم کنید

select * from tbl1 into t1

select* from t1

drop table t1


میخواستم ببینم میشه اون t1 رو به صورت مجازی ایجاد کرد یا با یک نام تصادفی و غیر تکراری؟

Mahmoud.Afrad
شنبه 27 خرداد 1396, 15:16 عصر
https://docs.microsoft.com/en-us/sql/t-sql/data-types/table-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql
https://technet.microsoft.com/en-us/library/ms189575.aspx

از جدولی که به صورت متغیر تعریف شده میتونید استفاده کنید یا cte و یا کوئری داخلی(لینکهای بالا)
از فانکشن ها هم میتونید استفاده کنید.
اگر از جداول temp استفاده کردید، در ابتدا یا انتهای کوئری جدول را drop کنید.


اگر کوئری را قرار بدید بهتر میشه نظر داد.

رامین مرادی
شنبه 27 خرداد 1396, 15:52 عصر
اصلاح شده در پست شماره 5

Mahmoud.Afrad
یک شنبه 28 خرداد 1396, 01:46 صبح
الان این، دو تا سلکت مجزا هست، درسته؟ استفاده ای از test8 نشده چرا؟


از table variable یا cte استفاده کنید مشکلتون حل میشه.

رامین مرادی
یک شنبه 28 خرداد 1396, 08:54 صبح
الان این، دو تا سلکت مجزا هست، درسته؟ استفاده ای از test8 نشده چرا؟


از table variable یا cte استفاده کنید مشکلتون حل میشه.
شرمنده من کوئری رو اشتباه گذاشته بودم :گیج:
این کوئری منه



select Distinct [Date1],[Date2],MamorId INTO test2 FROM [dbo].[MamoriatTbl],[dbo].[ShahrTbl]
where [Date1] BETWEEN '2001/03/12' AND '2001/03/18' AND MamorId='12' AND [dbo].[ShahrTbl].Id=[dbo].[MamoriatTbl].ShahrId AND [dbo].[ShahrTbl].Name not in(N't') AND MamoriatTbl.Onvan in('s')
select MamorId,SUM(convert(int,DateDiff(Day,convert(date,[dbo].[PersianToGregorian](test2.[Date1])),convert(date,[dbo].[PersianToGregorian](test2.[Date2]))))+1)as CountDay
,[PersonnelTbl].Name,PersonnelTbl.Family from test2,[PersonnelTbl] where [PersonnelTbl].PersonnelId=MamorId






این روشی هم که گفتید ممنون میشم راهنمایی کنید یا یک مثال بزنید. ممنون.

Mahmoud.Afrad
یک شنبه 28 خرداد 1396, 09:49 صبح
کافیه لینک هایی که دادم رو نگاه کنید.
مثلا (کد را خودتون تست کنید)
;with test2
as
(
select Distinct [Date1],
[Date2],
MamorId
FROM [dbo].[MamoriatTbl], [dbo].[ShahrTbl]
where [Date1] BETWEEN '2001/03/12'
AND '2001/03/18'
AND MamorId='12'
AND [dbo].[ShahrTbl].Id=[dbo].[MamoriatTbl].ShahrId
AND [dbo].[ShahrTbl].Name not in(N't')
AND MamoriatTbl.Onvan in('s')
)
select MamorId,
SUM(convert(int,DateDiff(Day,convert(date,[dbo].[PersianToGregorian](test2.[Date1])),convert(date,[dbo].[PersianToGregorian](test2.[Date2]))))+1) as CountDay
,[PersonnelTbl].Name,
PersonnelTbl.Family
from test2, [PersonnelTbl]
where [PersonnelTbl].PersonnelId=MamorId

رامین مرادی
یک شنبه 28 خرداد 1396, 10:59 صبح
ممنون خروجی مورد نظرمو داد .
فقط دیگه خطای وجود جدول به وجود نمیآید با این روش؟