让说我有存储过程简单:如何从SQL Server中的存储过程进行查询?
ALTER PROCEDURE [dbo].[myProc]
AS
BEGIN
SELECT * FROM myTable
END
我怎样才能做一个WHERE语句在Microsoft SQL Server Management Studio中的存储过程?类似的东西:
SELECT * FROM myProc WHERE x = 'a'; -- But that doesn't work...
让说我有存储过程简单:如何从SQL Server中的存储过程进行查询?
ALTER PROCEDURE [dbo].[myProc]
AS
BEGIN
SELECT * FROM myTable
END
我怎样才能做一个WHERE语句在Microsoft SQL Server Management Studio中的存储过程?类似的东西:
SELECT * FROM myProc WHERE x = 'a'; -- But that doesn't work...
它听起来像你正试图做一个“动态”的存储过程。你可能想要做
的东西是:
1)将您的存储过程中的内容到一个临时表
2)使用动态SQL的where条件适用于临时表。
喜欢的东西:
declare @as_condition varchar(500); --Your condition
create table #a
(
id bigint
)
insert into #a
execute sproc
declare @ls_sql varchar(max);
set @ls_sql = "select * from #a where " + @as_condition;
execute (@ls_sql);
不需要动态SQL select * from #a where x ='a'将工作得很好。 – HLGEM 2009-11-04 21:35:40
只要确保使用完全相同的列来定义临时表,存储过程就会返回相同的数据类型。除非结构匹配,否则它将不起作用。 – HLGEM 2009-11-04 21:36:35
我想@Hythloth的意思是插入你的存储过程的_results_,而不是_contents_。 – Suncat2000 2016-01-26 19:26:54
您不能添加WHERE子句到这样的存储过程。
你应该把子句中的存储过程,就像这样:
ALTER PROCEDURE [dbo].[myProc]
@X VARCHAR(10)
AS
BEGIN
SELECT * FROM myTable WHERE [email protected]
END
GO
的语法调用存储过程是通过使用EXECUTE不选择(例如):
EXECUTE dbo.myProc 'a'
我知道,但让我说我没有权利修改程序... – 2009-11-04 21:16:54
然后,你必须执行存储过程作为Hythloth建议的临时表,然后在该临时表上运行限制性查询。虽然我真的不会使用动态SQL,除非你真的,真的必须 – AdaTheDev 2009-11-04 21:20:58
如果你想在WHERE子句是一些你可以“关闭”你能做到这一点,传递一个预定值(例如-1)如果WHERE限制被绕过:
ALTER PROCEDURE [dbo].[myProc]
@X VARCHAR(10)
AS
BEGIN
SELECT * FROM myTable WHERE [email protected] or @X = -1
END
GO
SQL Server允许您使用INSERT INTO来获取存储过程的输出。例如,要抓住与SPID < 10的所有进程,使用方法:
create table #sp_who (
spid smallint,
ecid smallint,
status nchar(30),
loginame nchar(128),
hostname nchar(128),
blk char(5),
dbname nchar(128),
cmd nchar(16),
request int)
insert into #sp_who execute sp_who
select * from #sp_who where spid < 10
您必须声明的存储过程中的变量,这将是必要的传递到运行存储过程。这是一个例子。请记住:在AS
之前,您只需使用@
字符声明任何变量,但在AS
之后,您必须编写Declare
声明任何变量,例如Declare @name nvarchar (50)
。
ALTER PROCEDURE [dbo].[myProc]
@name varchar (50)
AS
BEGIN
SELECT * FROM myTable
where name= @name
END
你的答案和上面2009年的人一样。 – 2014-11-04 22:29:54
我认为最好使用视图或表值函数而不是建议的方法。两者都允许你传递参数到函数
你继续使用这个词...我不认为这意味着你认为它的意思... – 2009-11-04 21:15:03
@ B蜥蜴:你必须毁了它... – 2009-11-04 21:15:43
我不明白吗?什么是错误的,我看不到我在哪里使用“我不会”。你在乎解释吗? – 2009-11-04 21:18:29