TVPを右クリックしても、「ALTERTO」のようなオプションが表示されません
できません。ドロップ/再作成する必要があります。 TVPに依存している場合は、次のことを行う必要があります。
sqltreeo.comのブログ投稿 を見つけました。これには、依存関係を一時的に削除してから再作成することで、プロセスを自動化する方法があります。
少し変更しました。
1.次の手順を作成する必要があります。
-- 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.次に、テーブルタイプ名を入力パラメータとして実行する必要があります。結果をグリッド形式で表示し(テキスト形式は長いテキストを切り捨てる可能性があるため)、結果テーブル全体を選択して、新しいクエリウィンドウにコピーします。
他の何かによって参照されている限り、ユーザー定義テーブルタイプを削除することはできません。
タイプ 'dbo.MyTableType'はオブジェクトによって参照されているため、削除できません 'MyStoredProcedure '。このタイプを参照する他のオブジェクトが存在する可能性があります。
SSMSが他のすべてのオブジェクトのリストを提供してくれればいいのですが、オブジェクトが多くない場合は、部分的に手動で行う方法で問題ない場合があります。
TVPタイプを使用するすべてのSPのリストを取得するには、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
新しいウィンドウを選択しますDROP PROCEDURE
セクションを強調表示/実行するだけですDROP and CREATE to
新しいウィンドウを選択して、変更を加えることができますCREATE
セクションを実行します