将标量引用传递给另一个标量

时间:2012-07-10 20:30:47

标签: sql-server-2008 scalar

在SQL Server中,我有一个接受日期参数的存储过程。然后将该日期参数传递给另一个存储过程。但是,第二个存储过程参数被命名为第一个参数。然后我需要有2个不同的标量变量:

DECLARE @date date, @sql varchar(100);

SET @date = '2012-07-01';
SELECT @sql = ('EXEC pStoredprocedure @date = '''+@date+'''')

我需要@sql标量来包含此文本,以便存储过程可以调用其他存储过程:

EXEC pStoredprocedure @date = '2012-07-01'

但是,当我运行上面的代码时,我收到了这个错误:

Msg 402, Level 16, State 1, Line 4 The data types varchar and date are incompatible in the add operator.

这几乎就像我需要逃离@date运算符。可以这样做吗?

旁注:是的,我正在尝试动态传递一些变量。我理解这样做的危险,但这样做更简单......

1 个答案:

答案 0 :(得分:2)

日期变量正在字符串连接中使用,因此应将其视为字符串,通过其声明,转换函数或强制转换。我试过这个:

 DECLARE @date varchar(20), @sql varchar(100);
SET @date = '2012-07-01';
SELECT @sql = ('EXEC pStoredprocedure @date = ''' + @date + '''')

 PRINT @sql

得到了这个:

 EXEC pStoredprocedure @date = '2012-07-01'

我被困在2005年,所以我没有date数据类型,但是当我尝试使用datetime时,我收到了这个错误:

  

消息241,级别16,状态1,行4转换时转换失败   来自字符串的日期时间。

您也可以尝试

 DECLARE @date datetime, @sql varchar(100);
SET @date = '2012-07-01';
SELECT @sql = ('EXEC pStoredprocedure @date = ''' + CONVERT(varchar(20), @date, 102) + '''')
 PRINT @SQL;

并获取

 EXEC pStoredprocedure @date = '2012.07.01'