【问题标题】:SQL not concatenating?SQL没有连接?
【发布时间】:2014-05-28 02:13:23
【问题描述】:

我已经使用 SQL 将近一周了。我试图在网上找到一些答案,但没有运气。任何帮助,将不胜感激。我使用的是 SQL Server 2005。

USE devSSIS 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'VFPOLEDB', N'AllowInProcess', 1 
GO

CREATE PROCEDURE readDBF (
   @path nvarchar(1000) = '\\initial_loc\somesubfolder\',
   @name nvarchar(50) = 'initial_dbf')
AS
BEGIN
    select * 
    from openrowset('VFPOLEDB.1', '[@path]'; ''; '', 'select * from [@name]')
END
GO

有人可以帮忙吗?

它说它有一个错误:

消息 7303,级别 16,状态 1,过程 readDBF,第 6 行
无法为链接服务器“(null)”初始化 OLE DB 提供程序“VFPOLEDB.1”的数据源对象。

【问题讨论】:

  • 你到底想做什么?
  • 制作一个我可以运行的 sp。 sp 的确切功能是用 1 个 sp 读取许多 .dbf 文件。下次我在路径中运行这个 sp 时,我可以查看另一个表

标签: sql sql-server-2005


【解决方案1】:

它看起来应该可以工作,但我不是 foxpro 专家,而且我已经很久没有使用它了。

如果删除路径变量周围的引号和@path 和@name 中的括号会怎样?

select * from openrowset('VFPOLEDB.1', @path; ''; '', 'select * from @name')

如果这不起作用,您可以在不创建过程的情况下尝试主命令。在新查询中,声明变量并尝试 openrowset 查询。然后在它工作后将其包装在创建过程语法中。

【讨论】:

  • 当我删除“@path”附近的引号时,当我删除“@name”附近的引号时,会显示“@path 附近的语法不正确”,但它会引发原始错误 tnx,尽管 ^_^
  • 不用担心 - 听起来你不能在 openrowset 中使用变量。您可以按照此处的建议尝试动态 sql:stackoverflow.com/questions/16021730/…
  • 我尝试了你的建议(tnx btw),但是当我尝试输入一些东西时出现了新错误USE devSSIS GO EXEC master.dbo.sp_MSset_oledb_prop N'VFPOLEDB', N'AllowInProcess', 1 GO CREATE PROCEDURE readDBF ( @path nvarchar(1000), @name nvarchar(50), @sql varchar(max) ) AS BEGIN set @sql = 'select * from openrowset(''VFPOLEDB.1'', ''' + @path +'''; ''; '', ''select * from ''' + @name + ''')' END GO 这段代码运行时没有错误但是当我添加这个exec @sql 它说must declare scalar variable @sql有什么建议吗?
  • 现在可能有点晚了,但是,该错误表明您在使用它之前忘记声明变量:DECLARE @sql NVARCHAR(MAX)
  • 要注意的另一件事是所有这些 GO 命令的变量范围。当您发出 GO 时,它会运行该脚本中的所有内容,然后忘记您已经声明的任何变量及其值,然后继续执行脚本的其余部分
猜你喜欢
  • 1970-01-01
  • 2021-07-25
  • 2013-07-29
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多