sql - 以 View 名称和日期作为参数的动态存储过程

标签 sql sql-server sql-server-2014

我创建了一个存储过程,它将 View 名称和日期作为参数,并检查 View 中是否有该日期的记录。但是,我收到以下错误

'Operand type clash: date is incompatible with int'.

我希望如果记录存在,1 将被返回,否则 0 将被返回,我可以使用它在另一个存储过程中做出决定。

代码如下

CREATE PROCEDURE [dbo].[usr_RecordExist]
    -- Add the parameters for the stored procedure here
    @ViewName SYSNAME,
    @TransDate Date
    --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE @DATEVARCHAR nvarchar(4000);
    SET @DATEVARCHAR = CONVERT(NVARCHAR, @TransDate, 103);
    -- Insert statements for procedure here
   DECLARE @SQLCommand NVARCHAR(MAX) = 
        N'SELECT COUNT(SYMBOL) FROM ' + QUOTENAME(@ViewName) + 'WHERE TRANSDATE = ' + '' + @DATEVARCHAR + '';

   EXECUTE [dbo].[sp_executesql] 
             @sqlCommand;
END

最佳答案

表达式 + '' 什么都不做,使用 + '''' 添加单引号。

...  + '''' + @DATEVARCHAR + '''';

关于sql - 以 View 名称和日期作为参数的动态存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311971/

相关文章:

php - 具有多个数据库的登录页面

sql-server - BACPAC 导入和临时表可能存在 BUG

sql - Sql Server 的@@Identity 和@@error 的mysql 等价物是什么以及如何在mysql 中使用try catch

sql-server - MSSQL中 “GO”的正确语法是什么?

SQL 创建其他列值相同的时间间隔

c# - 如何获取datagridview当前行列值?

sql - 在 concat,oracle 期间格式化列标题

sql - SQL Server 2014 中类似于 DATEDIFF_BIG 的自定义代码

mysql - 连接后另一个表的第二低值

mysql - 在 SQLAlchemy 中,如何创建唯一对?