كيفية تحديد الاسم الداخلي من قيم الجدول متغير في MS SQL Server 2005

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

  •  01-07-2019
  •  | 
  •  

سؤال

اسم جدول مؤقت مثل #t1 يمكن تحديدها باستخدام

select @TableName = [Name]
from tempdb.sys.tables 
where [Object_ID] = object_id('tempDB.dbo.#t1')

كيف يمكنني العثور على اسم الجدول قيمة متغير ، أيواحد أعلن من قبل

declare @t2 as table (a int)

والغرض من ذلك هو أن تكون قادرة على الحصول على المعلومات الوصفية عن الطاولة ، استخدام شيء من هذا القبيل

select @Headers = dbo.Concatenate('[' + c.[Name] + ']')  
from  sys.all_columns c
    inner join sys.tables t
        on c.object_id = t.object_id
where t.name = @TableName

على الرغم من أن درجة الحرارة الجداول لا بد من النظر في tempdb.sys.tables بدلا من sys.tables.حيث كنت تبحث عن طاولة الكرام المتغيرات ؟


وأنا أدرك الآن أنني لا يمكن أن أفعل ما أريد أن أفعله ، وهو كتابة وظيفة عامة لتنسيق الجدول قيمة المتغيرات في الجداول html.بالنسبة للمبتدئين في sql server 2005 لا يمكنك تمرير الجدول الكرام المعلمات:

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

وعلاوة على ذلك, في sql server 2008 المعلمات يجب أن تكون كتبته بقوة لذلك سوف تعرف دائما عدد و نوع من الأعمدة.

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

المحلول

أنا لا أعتقد أنك يمكن أن متغيرات الجدول يتم إنشاؤها في الذاكرة وليس في tempdb.

نصائح أخرى

الجدول متغير البيانات الوصفية هو للعرض في tempdb.sys.tables أيضا.هذا هو التحقق من أدناه

declare @t2 as table ( [38F055D8-25D9-4AA6-9571-F436FE] int)

SELECT t.name, t.object_id
FROM tempdb.sys.tables t
JOIN tempdb.sys.columns c
ON t.object_id = c.object_id 
WHERE c.name = '38F055D8-25D9-4AA6-9571-F436FE'

نتائج سبيل المثال

name                           object_id
------------------------------ -----------
#4DB4832C                      1303675692

ولكن ستلاحظ اسم الكائن هو السيارات ولدت و الدببة لا علاقة اسم المتغير.

إذا لم يكن لديك مضمونة فريدة من نوعها اسم العمود يمكنك استخدام عامل التصفية على النحو الوارد أعلاه و الجدول متغير واحد على الأقل التوالي في أنه يمكنك (من SQL Server 2008 فصاعدا) استخدام %%physloc%% و DBCC PAGE لتحديد هذه المعلومات.المثال أدناه.

DECLARE @t2 AS TABLE ( a INT)

INSERT INTO @t2
VALUES      (1)

DECLARE @DynSQL NVARCHAR(100)

SELECT TOP (1) @DynSQL = 'DBCC PAGE(2,' + CAST(file_id AS VARCHAR) + ',' + 
                                          CAST( page_id AS VARCHAR) +
                                        ',1) WITH TABLERESULTS'
FROM   @t2
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )

DECLARE @DBCCPage TABLE (
  [ParentObject] [VARCHAR](100) NULL,
  [Object]       [VARCHAR](100) NULL,
  [Field]        [VARCHAR](100) NULL,
  [VALUE]        [VARCHAR](100) NULL )

INSERT INTO @DBCCPage
EXEC (@DynSQL)

SELECT VALUE                 AS object_id,
       OBJECT_NAME(VALUE, 2) AS object_name
FROM   @DBCCPage
WHERE  Field = 'Metadata: ObjectId'  

من الكتب على الانترنت:

جدول متغير يتصرف وكأنه متغير محلي.فقد واضحة المعالم نطاق ، الذي هو وظيفة الإجراء المخزن أو الدفعة التي أعلنت.

ونظرا لهذا ، ينبغي أن يكون هناك لا حاجة للبحث عن هذه القيمة في وقت التشغيل لأن عليك أن تعرف أنه في وقت التصميم.

موضوع يمر التعسفي قوائم/المصفوفات في SQL Server 2005 وظيفة أو sproc,
على الأقل باقة طريقة أعرف هو استخدام XML متغير.إذا رغبت في ذلك ، أن متغير XML يمكن أن يكون بقوة XML المكتوب النوع الذي يرتبط w/ مخطط XML.

وبالنظر إلى قائمة تمريرها إلى الإجراء/وظيفة XML, يمكنك استخراج تلك القائمة إلى متغير الجدول أو الجدول المؤقت عبر "التقطيع"."أجاد" XML يعني أن التحويل في الاتجاه المعاكس-من XML إلى مجموعة الصفوف(s).(ل XML شرط يؤدي إلى صفوف XML التحول.)

في الجدول المعرفة من قبل المستخدم وظيفة

CREATE FUNCTION [dbo].[udtShredXmlInputBondIdList]  
( 
-- Add the parameters for the function here
@xmlInputBondIdList xml
)
RETURNS 
@tblResults TABLE 
(
-- Add the column definitions for the TABLE variable here
    BondId int 
)
AS
BEGIN
-- Should add a schema validation for @xmlInputIssuerIdList here
--Place validation here
-- Fill the table variable with the rows for your result set
INSERT @tblResults
SELECT  
nref.value('.', 'int') as BondId
FROM
@xmlInputBondIdList.nodes('//BondID') as R(nref)
RETURN 
END

إذا كان @xmlInputBondIdList هو XML جزء من المتوقع هيكل مثل ذلك على الفور دون و هو الاحتجاج على النحو التالي

DECLARE @xmlInputBondIdList xml
SET @xmlInputBondIdList =
'<XmlInputBondIdList>

<BondID>8681</BondID>

<BondID>8680</BondID>

<BondID>8684</BondID>

</XmlInputBondIdList>
'

SELECT * 
FROM [CorporateBond].[dbo].[udtShredXmlInputBondIdList] 
     (@xmlInputBondIdList)

وسوف تكون النتيجة مجموعة الصفوف

BondId

8681

8680

8684

بضعة أمثلة أخرى يمكن العثور عليها في http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=678284&SiteID=1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top