我需要删除SQL Server数据库中高度引用的表.如何获取我需要删除的所有外键约束的列表以便删除表?
(在管理工作室的GUI中,SQL答案比点击更好.)
SQL Server中的本地和全局临时表有什么区别?
可能重复:
检索存储过程结果集的列定义
我使用以下SQL来获取表或视图的列名和类型:
DECLARE @viewname varchar (250);
select a.name as colname,b.name as typename
from syscolumns a, systypes b -- GAH!
where a.id = object_id(@viewname)
and a.xtype=b.xtype
and b.name <> 'sysname'
Run Code Online (Sandbox Code Playgroud)
如何为存储过程的输出列执行类似的操作?
我有存储过程A并希望通过传递@mydate参数从A调用存储过程B. 存储过程B将返回一个行集,我可以在程序A中进一步使用.
我在Google上研究了这个,但没有使用临时表就找不到任何东西.有一个简单的方法来获得这个没有临时表.
PS:我试图使用存储过程作为A和一个函数作为B轻松完成此操作.但是想知道我是否只能通过使用存储过程来完成它.
考虑以下sql
一个名为myProc的存储过程,它返回两个结果集.结果集1返回column1,column2.结果集2返回第3列第4列第5列.
以下sql将失败,因为临时表仅定义了2个int列.
Create Table #temp1(
Column1 int,
Column2 int)
insert into #temp1 exec myProc
Run Code Online (Sandbox Code Playgroud)
我的问题是是否可以将第一个结果集插入#temp1?
假设我有一个存储过程,它返回一大组数据.我可以编写另一个查询来过滤存储过程的结果吗?
例如:
select * from
EXEC xp_readerrorlog
where LogDate = '2011-02-15'
Run Code Online (Sandbox Code Playgroud) select * from (EXEC sp_SomeStoredProc)
Run Code Online (Sandbox Code Playgroud)
如果你不能这样做那么什么阻止它被添加到SQL标准或T-SQL?
当我在寻找一个SQL Server数据库时,我经常想要以交互方式检索数据库表的简单列名列表(没有数据类型信息等,只有名称)sqlcmd.
我可以做这个:
EXEC sp_columns @table_name = 'tablename'
Run Code Online (Sandbox Code Playgroud)
这给了我比我想要的更多的东西,并在命令提示符中包含它接近无法理解的程度,或者我可以这样做:
SELECT col.name
FROM sysobjects obj
INNER JOIN syscolumns col
ON obj.id = col.id where obj.name = 'tablename'
Run Code Online (Sandbox Code Playgroud)
这给了我想要的东西,但有点冗长.
我希望能够做到这样的事情:
SELECT column_name
FROM (EXEC sp_columns @table_name = 'tablename')
Run Code Online (Sandbox Code Playgroud)
但这不起作用(例如,参见这个问题).
有没有更简洁的方法来做到这一点(即更容易在命令行输入,因此更不容易出错)?