TSQL تحديد الجدول المؤقت (أو متغير الجدول) دون تحديد مخطط؟

StackOverflow https://stackoverflow.com/questions/688233

سؤال

هل هناك طريقة لتحديد جدول مؤقت دون تحديد انها مخطط في خط الهجوم؟

هل كانت مفيدة؟

المحلول

والواقع باستخدام متغير الجدول، جدول في الذاكرة، هي الطريقة المثلى للذهاب. و#table بإنشاء جدول في ديسيبل درجة الحرارة، و## الجدول العالمي - مع كل الضربات القرص. النظر في تباطؤ / ضرب من ذوي الخبرة مع عدد من المعاملات.

CREATE PROCEDURE [dbo].[GetAccounts] 
    @AccountID BIGINT,
    @Result INT OUT,
    @ErrorMessage VARCHAR(255) OUT
AS
BEGIN
    SET NOCOUNT ON;
    SET @Result = 0
    SET @ErrorMessage = ''

    DECLARE @tmp_Accounts TABLE (
                                                AccountId BIGINT,
AccountName VARCHAR(50),
...
)

INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE  ...


    IF @@Rowcount = 0
        BEGIN
            SET @ErrorMessage = 'No accounts found.'
            SET @Result = 0

            RETURN @Result
        END
    ELSE
        BEGIN
            SET @Result = 1

            SELECT *
            FROM @tmp_Accounts
        END 

ملاحظة الطريقة التي تضاف إلى هذا الجدول المؤقت.

وهذا الجانب السلبي من هذا هو أنه قد يستغرق وقتا أطول قليلا في الكتابة، لديك لتحديد متغير الجدول الخاص بك.

ويهمني أيضا أن يوصي موجه SQL للمحلل الاستعلام بواسطة REDGATE.

نصائح أخرى

ولا تحتاج OPENQUERY. وضعت للتو "INTO #AnyTableName" بين قائمة مختارة ومن أي استعلام ...

SELECT *
    INTO #Temp1
    FROM table1
    WHERE x=y

نعم، يمكنك إنشاء مع

SELECT INTO ...

ودعونا نقول

SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top