SQL Server执行问题

SQL Server执行问题,sql,sql-server,Sql,Sql Server,exec sp\u columns tablename调用是否修改了表中的任何数据?要找到它,请执行以下命令: exec sp_helptext 'sp_columns' 您将获得此存储过程的文本: create procedure sys.sp_columns ( @table_name nvarchar(384), @table_owner nvarchar(384) = null, @table_qualifier sysnam

exec sp\u columns tablename调用是否修改了表中的任何数据?

要找到它,请执行以下命令:

exec sp_helptext 'sp_columns'
您将获得此存储过程的文本:

create procedure sys.sp_columns
(
    @table_name         nvarchar(384),
    @table_owner        nvarchar(384) = null,
    @table_qualifier    sysname = null,
    @column_name        nvarchar(384) = null,
    @ODBCVer            int = 2
)
as
    declare @full_table_name    nvarchar(769) -- 384 + 1 + 384
    declare @table_id           int
    declare @fUsePattern        bit

    select @fUsePattern = 1

    if (@ODBCVer is null) or (@ODBCVer <> 3)
        select @ODBCVer = 2

    if @table_qualifier is not null
    begin
        if db_name() <> @table_qualifier
        begin   -- If qualifier doesn't match current database
            raiserror (15250, -1,-1)
            return
        end
    end

    -- "ALL" is represented by NULL value.
    if @table_name = '%'
        select @table_name = null
    if @table_owner = '%'
        select @table_owner = null
    if @table_qualifier = '%'
        select @table_qualifier = null
    if @column_name = '%'
        select @column_name = null

    -- Empty string means nothing, so use invalid identifier.
    -- A quoted space will never match any object name.
    if @table_owner = ''
        select @table_owner = ' '

    select @full_table_name = isnull(quotename(@table_owner), '') + '.' + isnull(quotename(@table_name), '')
    select @table_id = object_id(@full_table_name)

    if (@fUsePattern = 1) -- Does the user want it?
    begin
        if ((isnull(charindex('%', @full_table_name),0) = 0) and
            (isnull(charindex('_', @full_table_name),0) = 0) and
            (isnull(charindex('[', @table_name),0) = 0) and
            (isnull(charindex('[', @table_owner),0) = 0) and
            (isnull(charindex('%', @column_name),0) = 0) and
            (isnull(charindex('_', @column_name),0) = 0) and
            (@table_id <> 0))
        begin
            select @fUsePattern = 0 -- not a single wild char, so go the fast way.
        end
    end

    if @fUsePattern = 0
    begin
        /* -- Debug output, do not remove it.
        print '*************'
        print 'No pattern matching.'
        print @fUsePattern
        print isnull(convert(sysname, @table_id), '@table_id = null')
        print isnull(@full_table_name, '@full_table_name = null')
        print isnull(@table_owner, '@table_owner = null')
        print isnull(@table_name, '@table_name = null')
        print isnull(@column_name, '@column_name = null')
        print '*************'
        */
        select
            TABLE_QUALIFIER             = s_cov.TABLE_QUALIFIER,
            TABLE_OWNER                 = s_cov.TABLE_OWNER,
            TABLE_NAME                  = s_cov.TABLE_NAME,
            COLUMN_NAME                 = s_cov.COLUMN_NAME,
            DATA_TYPE                   = s_cov.DATA_TYPE_28,
            TYPE_NAME                   = s_cov.TYPE_NAME_28,
            "PRECISION"                 = s_cov.PRECISION_28,
            "LENGTH"                    = s_cov.LENGTH_28,
            SCALE                       = s_cov.SCALE_90,
            RADIX                       = s_cov.RADIX,
            NULLABLE                    = s_cov.NULLABLE,
            REMARKS                     = s_cov.REMARKS,
            COLUMN_DEF                  = s_cov.COLUMN_DEF,
            SQL_DATA_TYPE               = s_cov.SQL_DATA_TYPE_28,
            SQL_DATETIME_SUB            = s_cov.SQL_DATETIME_SUB_90,
            CHAR_OCTET_LENGTH           = s_cov.CHAR_OCTET_LENGTH_28,
            ORDINAL_POSITION            = s_cov.ORDINAL_POSITION,
            IS_NULLABLE                 = s_cov.IS_NULLABLE,
            SS_DATA_TYPE                = s_cov.SS_DATA_TYPE

        from
            sys.spt_columns_odbc_view s_cov

        where
            s_cov.object_id = @table_id -- (2nd) (@table_name is null or o.name like @table_name)
            -- (2nd) and (@table_owner is null or schema_name(o.schema_id) like @table_owner)
            and (@column_name is null or s_cov.COLUMN_NAME = @column_name) -- (2nd)             and (@column_name is NULL or c.name like @column_name)
            and s_cov.ODBCVER = @ODBCVer
            and s_cov.OBJECT_TYPE <> 'TT'
            and ( s_cov.SS_IS_SPARSE = 0 OR objectproperty ( s_cov.OBJECT_ID, 'tablehascolumnset' ) = 0 )
        order by 17
    end
    else
    begin
        /* -- Debug output, do not remove it.
        print '*************'
        print 'THERE IS pattern matching!'
        print @fUsePattern
        print isnull(convert(sysname, @table_id), '@table_id = null')
        print isnull(@full_table_name, '@full_table_name = null')
        print isnull(@table_owner, '@table_owner = null')
        print isnull(@table_name, '@table_name = null')
        print isnull(@column_name, '@column_name = null')
        print '*************'
    */
        select
            TABLE_QUALIFIER             = s_cov.TABLE_QUALIFIER,
            TABLE_OWNER                 = s_cov.TABLE_OWNER,
            TABLE_NAME                  = s_cov.TABLE_NAME,
            COLUMN_NAME                 = s_cov.COLUMN_NAME,
            DATA_TYPE                   = s_cov.DATA_TYPE_28,
            TYPE_NAME                   = s_cov.TYPE_NAME_28,
            "PRECISION"                 = s_cov.PRECISION_28,
            "LENGTH"                    = s_cov.LENGTH_28,
            SCALE                       = s_cov.SCALE_90,
            RADIX                       = s_cov.RADIX,
            NULLABLE                    = s_cov.NULLABLE,
            REMARKS                     = s_cov.REMARKS,
            COLUMN_DEF                  = s_cov.COLUMN_DEF,
            SQL_DATA_TYPE               = s_cov.SQL_DATA_TYPE_28,
            SQL_DATETIME_SUB            = s_cov.SQL_DATETIME_SUB_90,
            CHAR_OCTET_LENGTH           = s_cov.CHAR_OCTET_LENGTH_28,
            ORDINAL_POSITION            = s_cov.ORDINAL_POSITION,
            IS_NULLABLE                 = s_cov.IS_NULLABLE,
            SS_DATA_TYPE                = s_cov.SS_DATA_TYPE

        from
            sys.spt_columns_odbc_view s_cov

        where
            s_cov.ODBCVER = @ODBCVer and
            s_cov.OBJECT_TYPE <> 'TT' and
            (@table_name is null or s_cov.TABLE_NAME like @table_name) and
            (@table_owner is null or schema_name(s_cov.SCHEMA_ID) like @table_owner) and
            (@column_name is null or s_cov.COLUMN_NAME like @column_name) and
            ( s_cov.SS_IS_SPARSE = 0 OR objectproperty ( s_cov.OBJECT_ID, 'tablehascolumnset' ) = 0 )

        order by 2, 3, 17
    end
创建过程sys.sp\u列
(
@表4:名称nvarchar(384),
@表_所有者nvarchar(384)=空,
@表\u限定符sysname=null,
@列名称nvarchar(384)=空,
@ODBCVer int=2
)
作为
声明@full_table_name nvarchar(769)--384+1+384
声明@table_id int
声明@fUsePattern位
选择@fUsePattern=1
如果(@ODBCVer为空)或(@ODBCVer 3)
选择@ODBCVer=2
如果@table_限定符不为空
开始
if db_name()@table_限定符
开始--如果限定符与当前数据库不匹配
raiserror(15250,-1,-1)
返回
结束
结束
--“全部”由空值表示。
如果@table_name='%'
选择@table_name=null
如果@table_owner='%
选择@table_owner=null
如果@table_限定符=“%”
选择@table_qualifier=null
如果@column_name='%'
选择@column\u name=null
--空字符串不表示任何内容,因此请使用无效标识符。
--带引号的空格永远不会与任何对象名称匹配。
如果@table_owner=“”
选择@table_owner=“”
选择@full_table_name=isnull(quotename(@table_owner),“”)+.+isnull(quotename(@table_name),“”)
选择@table\u id=object\u id(@full\u table\u name)
如果(@fUsePattern=1)--用户需要它吗?
开始
if((isnull(charindex('%',@full_table_name),0)=0)和
(isnull(charindex(“”,@full_table_name),0)=0)和
(isnull(charindex('[',@table_name),0)=0)和
(isnull(charindex('[',@table_owner),0)=0)和
(isnull(charindex('%',@column_name),0)=0)和
(isnull(charindex(“”,@column_name),0)=0)和
(@table_id 0))
开始
选择@fUsePattern=0——而不是一个野生字符,所以请快速进行。
结束
结束
如果@fUsePattern=0
开始
/*--调试输出,不要删除它。
打印“************”
打印“无模式匹配”
打印@fUsePattern
打印为空(转换(sysname,@table\u id),“@table\u id=null”)
打印为空(@full\u table\u name,@full\u table\u name=null)
打印为空(@table\u owner,@table\u owner=null)
打印为空(@table\u name,@table\u name=null)
打印为空(@column\u name,“@column\u name=null”)
打印“************”
*/
选择
TABLE_QUALIFIER=s_cov.TABLE_QUALIFIER,
TABLE_OWNER=s_cov.TABLE_OWNER,
TABLE_NAME=s_cov.TABLE_NAME,
COLUMN\u NAME=s\u cov.COLUMN\u NAME,
数据类型=s\U cov.DATA\U TYPE\U 28,
TYPE_NAME=s_cov.TYPE_NAME_28,
“精度”=s_cov.PRECISION_28,
“长度”=s_cov.LENGTH_28,
刻度=s_cov.SCALE_90,
基数=s_cov.基数,
NULLABLE=s_cov.NULLABLE,
备注=s_cov.备注,
COLUMN_DEF=s_cov.COLUMN_DEF,
SQL\u数据类型=s\u cov.SQL\u数据类型\u 28,
SQL_DATETIME_SUB=s_cov.SQL_DATETIME_SUB_90,
CHAR_OCTET_LENGTH=s_cov.CHAR_OCTET_LENGTH_28,
序号位置=序号位置,
IS_NULLABLE=s_cov.IS_NULLABLE,
SS_数据类型=s_cov.SS_数据类型
从…起
sys.spt\u列\u odbc\u视图s\u cov
哪里
s_cov.object_id=@table_id--(第二个)(@table_name为null或类似于@table_name的o.name)
--(第二)和(@table_owner为null或类似于@table_owner的schema_名称(o.schema_id))
和(@column_name为null或s_cov.column_name=@column_name)-(第二)和(@column_name为null或类似于@column_name的c.name)
和s_cov.ODBCVER=@ODBCVER
和s_cov.OBJECT_类型“TT”
和(s_cov.SS_IS_SPARSE=0或objectproperty(s_cov.OBJECT_ID,'tablehascolumnset')=0)
17点前下单
结束
其他的
开始
/*--调试输出,不要删除它。
打印“************”
打印“有模式匹配!”
打印@fUsePattern
打印为空(转换(sysname,@table\u id),“@table\u id=null”)
打印为空(@full\u table\u name,@full\u table\u name=null)
打印为空(@table\u owner,@table\u owner=null)
打印为空(@table\u name,@table\u name=null)
打印为空(@column\u name,“@column\u name=null”)
打印“************”
*/
选择
TABLE_QUALIFIER=s_cov.TABLE_QUALIFIER,
TABLE_OWNER=s_cov.TABLE_OWNER,
TABLE_NAME=s_cov.TABLE_NAME,
COLUMN\u NAME=s\u cov.COLUMN\u NAME,
数据类型=s\U cov.DATA\U TYPE\U 28,
TYPE_NAME=s_cov.TYPE_NAME_28,
“精度”=s_cov.PRECISION_28,
“长度”=s_cov.LENGTH_28,
刻度=s_cov.SCALE_90,
基数=s_cov.基数,
NULLABLE=s_cov.NULLABLE,
备注=s_cov.备注,
COLUMN_DEF=s_cov.COLUMN_DEF,
SQL\u数据类型=s\u cov.SQL\u数据类型\u 28,
SQL_DATETIME_SUB=s_cov.SQL_DATETIME_SUB_90,
CHAR_OCTET_LENGTH=s_cov.CHAR_OCTET_LENGTH_28,
序数位置