سادهترین روش جهت استفاده از نام ستونها در دستورات TSQL کدام است؟
نویسنده: هادی مزارعی
تاریخ: ۱۴۰۵/۰۶/۰۲ ۱۴:۲۷
آدرس: www.dntips.ir
INSERT INTO SummaryHistory EXEC dbo.qrySummary
INSERT INTO TargetTable (ColA, ColB) EXEC SP دادهها را صرفاً بر اساس ترتیب مکانی (Position) ستونها نگاشت میکند، نه بر اساس نام ستونها. یعنی حتی اگر نام ستونها را در بخش INSERT INTO قید کنید، باز هم اولین ستون خروجی SP در اولین ستون لیست و دومی در دومی درج خواهد شد.-- ۱. جدول موقت با ساختار دقیق خروجی SP
CREATE TABLE #TempSummary
(
-- اینجا دقیقاً ستونهای خروجی dbo.qrySummary را تعریف کنید
ColA INT,
ColB NVARCHAR(100),
ColC DATETIME
-- ...
);
-- ۲. نتیجه SP را داخل جدول موقت بریزید
INSERT INTO #TempSummary
EXEC dbo.qrySummary;
-- ۳. حالا با نام ستونها به جدول اصلی INSERT کنید
INSERT INTO SummaryHistory
(
TargetCol1, -- ستون جدول مقصد
TargetCol2,
TargetCol3
-- ستونهای اضافی مقصد که میخواهید مقدار پیشفرض یا ثابت بگیرند را اینجا ننویسید
)
SELECT
ColA, -- از جدول موقت (میتوانید ترتیب را عوض کنید)
ColB,
ColC
FROM #TempSummary;
-- پاکسازی
DROP TABLE #TempSummary;SELECT صراحتاً فیلدها را به ستونهای جدول مقصد منتسب میکنید.#Temp، باید دقیقاً با خروجی فعلی SP مطابقت داشته باشد (تعداد، ترتیب و نوع داده). اگر SP عوض شود، #Temp را هم آپدیت کنید.#Temp از @Temp TABLE (...) استفاده کنید (محدودیت اندازه حافظه دارد).dbo.qrySummary را دارید، میتوانید به جای بازگرداندن یک SELECT ساده، داخل پروسیجر، خروجی را مستقیماً درون یک #TempTable از پیش تعریفشده بریزید. در SQL Server، پروسیجرهای فرزند، به جدول موقتی که در پروسیجر والد ساخته شدهاست، دسترسی دارند.sys.dm_exec_describe_first_result_setساختار را داینامیک بگیرید (SQL Server خودش این ابزار بسیار خوب را برای کشف schema خروجی یک Stored Procedure دارد) و بر اساس آن، جدول موقت را بسازید؛ اما پیچیدگی آن زیاد میشود و برای اکثر موارد لازم نیست.SELECT
name,
column_ordinal,
system_type_name
FROM sys.dm_exec_describe_first_result_set
(
N'EXEC dbo.qrySummary',
NULL,
0
)
WHERE is_hidden = 0;