2

是否有一个查询返回 SQL Server 数据库中的所有存储过程的名称,其部分或全部参数具有varchar数据类型,我们可以更改它,因为我们将所有数据库表从varcharto更改为,nvarchar并且有很多存储过程要更改那么也许需要一整天,所以请帮助我

4

3 回答 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)因为textntext已弃用且不应再使用)

于 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 回答