2009-11-14 13 views
19

मुझे टीवी एतालिका मूल्य पैरामीटर को कैसे बदलें

+0

टीवीपी के लिए वैकल्पिक ?? एक टीवीपी एक समारोह/प्रक्रिया परिभाषा का हिस्सा है। खुद ही एक इकाई नहीं है !? – Nestor

+0

विकल्प के लिए विकल्प आरटी सक्षम नहीं है? – anishMarokey

+3

तालिका-मूल्यवान पैरामीटर SQL सर्वर 2008 में एक नया पैरामीटर प्रकार हैं। तालिका-मूल्यवान पैरामीटर उपयोगकर्ता द्वारा परिभाषित तालिका प्रकारों का उपयोग करके घोषित किए जाते हैं। मुझे लगता है कि आप उपयोगकर्ता परिभाषित टेबल प्रकार को बदलने के बारे में पूछ रहे हैं ?? जहां तक ​​मुझे पता है, आप उपयोगकर्ता द्वारा परिभाषित तालिका प्रकार बना सकते हैं और ड्रॉ कर सकते हैं, लेकिन इसे बाद में नहीं। – Nestor

उत्तर

41

पर सही क्लिक करने पर 'ALTER TO' जैसे विकल्प नहीं मिल रहे हैं। आपको ड्रॉप/रीटेट करना होगा। आप TVP पर निर्भरता है, तो आप करना होगा:

  1. (1)
  2. बूंद वर्ष TVP
  3. विश्राम मूल नाम
  4. के तहत (1) का उपयोग करने के
  5. बदलने निर्भरता नए नाम से नई TVP बनाने
  6. बदलने निर्भरता उपयोग करने के लिए (4)
  7. ड्रॉप (1)
+3

धन्यवाद, लेकिन परेशानी बेकार है। –

10

मैं एकपाया हैजिसमें निर्भरता को अस्थायी रूप से छोड़कर और फिर उन्हें फिर से बनाकर प्रक्रिया को स्वचालित करने का एक तरीका है।

मैंने इसे थोड़ा सा संशोधित किया।

1.You निम्न कार्यविधि बनाना चाहिए:

-- Find all referencing objects to user-defined table type in @fullObjectName parameter 
-- and generate DROP scripts and CREATE scripts for them 
CREATE PROC [dbo].[alterTableType] (@fullObjectName VARCHAR(200)) 
AS 
BEGIN 
    SET NOCOUNT ON 

    IF (TYPE_ID (@fullObjectName) IS NULL) 
    BEGIN 
     RAISERROR ('User-defined table type ''%s'' does not exists. Include full object name with schema.', 16,1, @fullObjectName) 
     RETURN 
    END; 

    WITH sources 
    AS 
    (
     SELECT ROW_NUMBER() OVER (ORDER BY OBJECT_NAME(m.object_id)) RowId, definition 
     FROM sys.sql_expression_dependencies d 
     JOIN sys.sql_modules m ON m.object_id = d.referencing_id 
     JOIN sys.objects o ON o.object_id = m.object_id 
     WHERE referenced_id = TYPE_ID(@fullObjectName) 
    ) 
    SELECT 'BEGIN TRANSACTION' 
    UNION ALL 
    SELECT 

     'DROP ' + 
      CASE OBJECTPROPERTY(referencing_id, 'IsProcedure') 
      WHEN 1 THEN 'PROC ' 
      ELSE 
       CASE 
        WHEN OBJECTPROPERTY(referencing_id, 'IsScalarFunction') = 1 OR OBJECTPROPERTY(referencing_id, 'IsTableFunction') = 1 OR OBJECTPROPERTY(referencing_id, 'IsInlineFunction') = 1 THEN 'FUNCTION ' 
        ELSE '' 
       END 
      END 
     + SCHEMA_NAME(o.schema_id) + '.' + 
     + OBJECT_NAME(m.object_id)  

    FROM sys.sql_expression_dependencies d 
    JOIN sys.sql_modules m ON m.object_id = d.referencing_id 
    JOIN sys.objects o ON o.object_id = m.object_id 
    WHERE referenced_id = TYPE_ID(@fullObjectName) 
    UNION ALL 
    SELECT 'GO' 
    UNION ALL 
    SELECT CHAR(13) + CHAR(10) + '---- WRITE HERE SCRIPT TO DROP OLD USER DEFINED TABLE TYPE AND CREATE A NEW ONE ----' + CHAR(13) + CHAR(10) 
    UNION ALL 
    SELECT 
     CASE 
      WHEN number = RowId THEN DEFINITION 
      ELSE 'GO' 
     END 
    FROM sources s 
    JOIN (SELECT DISTINCT number FROM master.dbo.spt_values) n ON n.number BETWEEN RowId AND RowId+1 
    UNION ALL 
    SELECT 'COMMIT' 
END 

2.Then आप एक इनपुट पैरामीटर के रूप में अपने तालिका प्रकार नाम के साथ इसे चलाने चाहिए। ग्रिड प्रारूप पर परिणाम दिखाएं (क्योंकि टेक्स्ट प्रारूप लंबे ग्रंथों को छोटा कर सकता है), संपूर्ण परिणाम तालिका का चयन करें और इसे एक नई क्वेरी विंडो में कॉपी करें।

+0

क्या आपने इसका परीक्षण किया है? – Shiva

+0

@ शिवा - हाँ मैंने किया। यह मेरे लिए काम किया। – BornToCode

+0

यह अच्छा था। मुझे बहुत समय बचाता है – Keith

संबंधित मुद्दे