当前位置:  开发笔记 > 数据库 > 正文

SQL要求声明声明的变量

如何解决《SQL要求声明声明的变量》经验,为你挑选了1个好方法。



1> Ben..:

当您exec(@sql)使用自己的局部变量创建新上下文时,并且尚未将@startDate值传递到该上下文中.

相反,为您的SQL字符串声明参数,如下所示:

exec sp_executesql @sql, '@startDate datetime, @endDate datetime', 
      @startDate, @endDate;

这些名称现在可供SQL使用,参数将传递给它们.

此方法更好,因为它将变量视为更安全的参数,因为它降低了SQL注入的风险.

作为附加提示,您还应该将@storeName作为参数传递.据我所知,你不能将@dbname作为参数传递,所以你应该确保它被正确引用.

所以完整的事情是:

Set @sql = 'Insert Into #storeinfo (storename, employeename, employeeaddress, employeephone) '
        +' Select @storename As ''storename'', '
        +' employeename, employeeaddress, employeephone '
        +' From '+QUOTENAME(@dblocation)+' '
        +' where employeestatus = ''Active'' '
        +' and CAST(hiredate As Date) '
        +' BETWEEN CAST(@startDate As Date) AND CAST(@endDate As Date) '


Print(@sql)
exec sp_executesql @sql, 
    '@startDate datetime, @endDate datetime, @storeName nvarchar(100)', 
    @startDate, @endDate, @storeName;

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有