是否有一个查询返回 SQL Server 数据库中的所有存储过程的名称,其部分或全部参数具有varchar
数据类型,我们可以更改它,因为我们将所有数据库表从varchar
to更改为,nvarchar
并且有很多存储过程要更改那么也许需要一整天,所以请帮助我
问问题
6868 次
3 回答
2
当然 - 试试这个:
SELECT
ProcedureName = pr.Name,
ParameterName = p.Name,
TypeName = t.Name
FROM
sys.procedures pr
INNER JOIN
sys.parameters p ON p.object_id = pr.object_id
INNER JOIN
sys.types t ON p.system_type_id = t.system_type_id
WHERE
t.Name = 'varchar'
您可能还想搜索类型参数char
(需要转换为nchar
)和text
(转换为ntext
- 或更好:nvarchar(max)
因为text
和ntext
已弃用且不应再使用)
于 2013-07-02T05:03:29.237 回答
2
Information_Schema 一直帮助我解决这些问题:
SELECT r.ROUTINE_NAME, p.PARAMETER_NAME
FROM
INFORMATION_SCHEMA.ROUTINES r INNER JOIN INFORMATION_SCHEMA.PARAMETERS p
ON r.SPECIFIC_CATALOG = p.SPECIFIC_CATALOG
AND r.SPECIFIC_SCHEMA = p.SPECIFIC_SCHEMA
AND r.SPECIFIC_NAME = p.SPECIFIC_NAME
WHERE
p.DATA_TYPE = 'varchar'
于 2013-07-02T05:06:01.353 回答
2
试试这个——
SELECT
[procedure_name] = SCHEMA_NAME(o.[schema_id]) + '.' + o.name
, parameter_name = p.name
FROM sys.objects o WITH(NOWAIT)
JOIN sys.parameters p WITH(NOWAIT) ON p.[object_id] = o.[object_id]
WHERE TYPE_NAME(p.user_type_id) = 'varchar'
AND o.[type] IN ('P ', 'X ', 'PC', 'RF')
于 2013-07-02T05:39:35.830 回答