【发布时间】:2017-04-25 19:01:04
【问题描述】:
我正在尝试在存储过程中使用参数值。但由于某种原因,我收到了一个错误
@sourceDB 附近的语法不正确
我写的代码是
CREATE PROCEDURE [dbo].[copyRecordType]
(@loggedInUserID varchar(max),
@recordTypeID int,
@sourceDB varchar(max))
AS
BEGIN
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION=servername,--server name is not the issue
DATABASE_NAME= @sourceDB,
CREDENTIAL= AppCred--credential is also not the issue
);
END
但是,如果我对Database_Name 的值进行硬编码,它就可以正常工作。例如
CREATE PROCEDURE [dbo].[copyRecordType]
(@loggedInUserID varchar(max),
@recordTypeID int,
@sourceDB varchar(max))
AS
BEGIN
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION=servername,
DATABASE_NAME= 'test',
CREDENTIAL= AppCred
);
END
有人可以指导我做错了什么吗?
我正在使用 SQL Server 2016 Management Studio。数据库位于 Azure 服务器上。
【问题讨论】:
-
很确定您必须为此使用动态 sql。
-
大多数 DDL 无法参数化。包括这个。
-
我想问你为什么要首先在存储过程中创建一个外部数据源。这将在第二次执行时失败,除非您还删除了数据源。
-
@SeanLange 是查询另一个数据库中的表。我最终将删除数据源
-
我了解它的用途。但是为什么不简单地在您的程序之外创建外部数据源呢?否则,您要么必须编写一堆代码来检查它是否存在,要么必须不断删除并重新创建它。好像有点傻只需创建外部数据源并不管它。需要时参考。
标签: sql-server stored-procedures parameters