在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
运算符。可以这样做吗?
旁注:是的,我正在尝试动态传递一些变量。我理解这样做的危险,但这样做更简单......
答案 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'