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,
序数位置