【问题标题】:How can I use a table variable as a parameter for OPENQUERY如何使用表变量作为 OPENQUERY 的参数
【发布时间】:2015-09-28 12:14:00
【问题描述】:

如何使用表变量作为 OPENQUERY 的参数

类似的东西:

DECLARE @TSQL VARCHAR(8000)
DECLARE @VAR TABLE (VAR1 VARCHAR (2))
INSERT INTO @VAR values ('CA'),('OR') ,('WA')
SELECT  @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + (SELECT VAR1 FROM @VAR)+ ''''''')'
EXEC (@TSQL)

【问题讨论】:

  • 有什么理由不这样做:...WHERE state IN ('CA,'OR','WA')...?
  • 我完全支持你@Amit。如果你想为动态 SQL 代码使用参数,你应该使用sp_executesql。带参数调用 sp_executesql 的示例:msdn.microsoft.com/en-us/library/ms188001(v=sql.120).aspx
  • 嗨 Amit 和 CeOnSql,提供的示例是一个简化。真正的查询在 Crystal Report 中,这些值不会是固定值。报表的用户将在运行时提示选择这些值,因此它们不能被硬编码。

标签: sql sql-server tsql parameters openquery


【解决方案1】:

我找到了适合我的情况的解决方案:

DECLARE @query varchar(8000)
DECLARE @list VARCHAR(8000)
DECLARE @len int
SET @list = ''
DECLARE @var TABLE (var1 VARCHAR (30))
INSERT INTO @var values ('2015-01-01 00:00:00.000'),('2015-01-02 00:00:00.000') ,('2015-01-03 00:00:00.000')
SELECT @list = @list + ISNULL(var1 + ''''',''''', '')
FROM @var
SET @len = len(@list)
SET @list = ''''''+left(@list,@len-3)
SELECT @query =
    'select *
    FROM openquery([REMOTESERVER],
        ''
        select *
        from [DATABASE].[SCHEMA].[TABLE]
        where FIELD in (' + @list + ')
        '')'
EXEC (@query)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-07-31
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多