0

在 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运营商一样。这可以做到吗?

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

4

1 回答 1

2

date 变量用于字符串连接,因此应将其视为字符串,无论是通过其声明、转换函数还是强制转换。我试过这个:

 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'
于 2012-07-10T21:02:36.757 回答