2011-04-08 86 views
0
IF (@SP_ARGUMENT IS NULL) 

SET @SP_ARGUMENT = (SELECT TOP(1) ID FROM TEST_TABLE) 

SELECT @SP_ARGUMENT AS ARGUMENT_VAL 

以上是我存储过程的代码片段。参数赋值不起作用?

但是,当我发送sp_argument为空,我希望它使用TEST_TABLE的第一个ID为下面的进一步查询,但不工作。我在这里做错了什么?

请帮忙。

+0

如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线,然后单击“代码示例“编辑器工具栏上的按钮(”{}“),以精确地格式化和语法突出显示它! – 2011-04-08 08:28:56

+1

当你说不工作时,你能告诉我们什么是确切的错误吗?你看到了什么输出?你如何调用Proc?理解EXEC MYPROC'NULL'&EXEC MYPROC NULL是两个不同的语句 – 2011-04-08 08:33:01

+0

问题是预期的预期不工作,它仍然是空的,并且Begin End也是我的代码的很大一部分,在上面错过了它代码片段。对不起,格式不好,我第一次在这里发布。 – NSN 2011-04-08 09:11:51

回答

1

你可以使用ISNULL做到这一点:

Set @SP_ARGUMENT = IsNull(@SP_ARGUMENT, (SELECT TOP(1) ID FROM TEST_TABLE)) 

SELECT @SP_ARGUMENT AS ARGUMENT_VAL 
+0

'COALESCE'也可以。 – 2011-04-08 12:39:24

0

为了正确控制T-SQL命令的流程,您需要将SET语句包装在Begin/End statement中。

IF (@SP_ARGUMENT IS NULL) 
BEGIN 
SET @SP_ARGUMENT = (SELECT TOP(1) ID FROM TEST_TABLE) 
END 
SELECT @SP_ARGUMENT AS ARGUMENT_VAL 
+0

不一定,虽然风格很好。当您有多个语句时,您只需要'BEGIN..END',请参阅http://msdn.microsoft.com/zh-cn/library/aa933214(v=SQL.80).aspx这不应该是原因的错误。 – 2011-04-08 08:44:39

+0

哎呀对不起,我错过了开始结束......问题是与任务不工作! – NSN 2011-04-08 09:10:42