SQL Server存储过程日期

时间:2015-05-04 09:15:48

标签: sql-server stored-procedures

我有一个在表格中添加新数据的程序。

表的名称在参数中。

错误是

  

数据类型varchar(max)和日期在add运算符中不兼容。

日期字段必须是<root> <book title="book1"> <author> Thibaut </author> <author> Luc </author> </book> <book title="book2"> <author> Luc </author> <author> Jay </author> </book> <book title="book3"> <author> Jay </author> <author> Henry </author> </book> </root> 类型。

PROCEDURE

date

1 个答案:

答案 0 :(得分:4)

请尝试使用CAST()

... + CAST(@date AS VARCHAR(MAX) + ...

此外,使用sp_executesql将是一种更好,更安全的方法。

DECLARE @SQL NVARCHAR(MAX);

SET @SQL =  ' INSERT INTO dbo.' + @Table;
SET @SQL += '   ([Timestamp], [Version],Process,[Level],[Message],StackTrace,[User],EnvironmentID,UUID,UDID,TransactionID)';
SET @SQL += ' VALUES';
SET @SQL += '   (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10);';

EXECUTE sp_executesql
      @SQL
    , N'@p0 DATE, @p1 VARCHAR(MAX), @p2 VARCHAR(MAX), @p3 VARCHAR(MAX), @p4 VARCHAR(MAX), @p5 VARCHAR(MAX), @p6 VARCHAR(MAX), @p7 VARCHAR(MAX), @p8 VARCHAR(MAX), @p9 VARCHAR(MAX), @p10 VARCHAR(MAX)'
    , @p0 = @date
    , @p1 = @version
    , @p2 = @process
    , @p3 = @level
    , @p4 = @message
    , @p5 = @stacktrace
    , @p6 = @user
    , @p7 = @environmentID
    , @p8 = @UUID
    , @p9 = @UDID
    , @p10 = @transactionID;

只需在第3行指定正确的列数据类型。