首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开放度中的传递变量

开放度中的传递变量
EN

Stack Overflow用户
提问于 2020-12-15 18:24:36
回答 1查看 80关注 0票数 0

我毫不怀疑我错过了一分钟,但我还是不知道这是什么。以下是查询:

代码语言:javascript
复制
DECLARE @START DATE, @END DATE, @MySQL VARCHAR(MAX)

SELECT @START = '12/1/2020'
SELECT @END = '12/10/2020'

SET @MySQL =
'SELECT * FROM OPENQUERY ([SERVERNAME], ''SELECT * FROM TABLE (NOLOCK) WHERE InitiatedDate BETWEEN ' + @Start + ' AND ' + @End + ')'
EXEC (@MySQL)

我知道这个错误:

添加运算符中的数据类型varchar和date不兼容。

我用类似的查询测试了这个级联方法,它成功了,没有问题:

代码语言:javascript
复制
SET @MySQL =
'SELECT * FROM OPENQUERY ([SERVER], ''SELECT top ' + @X + '  * FROM TABLE'')'
EXEC (@MySQL)
EN

回答 1

Stack Overflow用户

发布于 2020-12-16 07:39:34

您的第二个示例可能正在工作,因为@X是VARCHAR数据类型。

在您的主要示例中,@START和@END被定义为日期数据类型,因此逻辑上不能将它们附加到VARCHAR数据类型中,就像添加6和‘6’不会导致12或‘66’的结果一样。

您需要使用转换函数将日期更改为日期的字符串表示形式。请小心使用format选项以格式获取字符串,然后该格式可自动转换回查询运行时的日期。

'SELECT * FROM OPENQUERY ([SERVERNAME], ''SELECT * FROM TABLE (NOLOCK) WHERE InitiatedDate BETWEEN ''' + CONVERT(varchar(10), @Start, 101) + ''' AND ''' + CONVERT(varchar(10), @End, 101) + ''')'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65311573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档