I am not getting option like \'ALTER TO\' when am right clicking on TVP
Can't do it. You must drop/recreate. If you have dependencies on the TVP, you must:
I've found a blog post on sqltreeo.com which has a way to automate the process by temporary dropping the dependencies and then re-creating them.
I just modified it a bit.
1.You should create the following procedure:
-- 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 you should run it with your table type name as a input parameter. Show the results on grid format (because text format might truncate long texts), select entire result table and copy it to a new query window.
You will get back the TVP and All the Sp's which uses the same TVP.
You cannot drop the User Defined Table Type as long as it's referenced by anything else:
Cannot drop type 'dbo.MyTableType' because it is being referenced by object 'MyStoredProcedure'. There may be other objects that reference this type.
It would be nice if SSMS gave you a listing of all other objects, but if you don't have many, a partially manual approach might work fine.
To get a list of all SPs that use your TVP type, you can query sys.sql_expression_dependencies
SELECT OBJECT_NAME(d.referencing_id)
FROM sys.sql_expression_dependencies d
WHERE d.referenced_id = TYPE_ID('MyTableType')
DROP and CREATE to
new windowDROP PROCEDURE
sectionDROP and CREATE to
new window and make any changesCREATE
section