Sql server SQL Server在存储过程中使用参数
我试图在存储过程中使用参数值。但由于某种原因,我得到了一个错误 @sourceDB附近的语法不正确 我写的代码是Sql server SQL Server在存储过程中使用参数,sql-server,stored-procedures,parameters,Sql Server,Stored Procedures,Parameters,我试图在存储过程中使用参数值。但由于某种原因,我得到了一个错误 @sourceDB附近的语法不正确 我写的代码是 CREATE PROCEDURE [dbo].[copyRecordType] (@loggedInUserID varchar(max), @recordTypeID int, @sourceDB varchar(max)) AS BEGIN CREATE EXTERNAL DATA SOURCE RemoteReferenceData
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
但是如果我硬编码数据库\u 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管理工作室。数据库位于Azure服务器上。我同意Sean的观点,但我认为可行的一种方法是,如果您没有太多数据库,将其分解为逻辑部分。但是,一次又一次地创建和删除此内容是没有意义的。只需创建它,并在需要时保留它
CREATE PROCEDURE [dbo].[copyRecordType](@loggedInUserID varchar(max), @recordTypeID int, @sourceDB varchar(max))
AS
BEGIN
IF(@sourceDB = 'db_1')
BEGIN
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION=servername,--server name is not the issue
DATABASE_NAME= db_1,
CREDENTIAL= AppCred --credential is also not the issue
);
END
IF(@sourceDB = 'db_2')
BEGIN
...
END
END
可以肯定的是,您必须为此使用动态sql。大多数DDL都不能参数化。包括这一点。我想问一下,首先为什么要在存储过程中创建外部数据源。除非同时删除数据源,否则它将在第二次执行时失败。@SeanLange在另一个数据库中查询表。我将删除数据源,最终我会明白它的用途。但是为什么不在您的过程之外简单地创建外部数据源呢?否则,您要么编写一堆代码来检查它是否存在,要么必须不断删除并重新创建它。看起来有点傻。只需创建外部数据源,就可以了。需要时可以引用它。@SeanLange我想我会使用动态sql而不是代码,因为我有很多数据库。谢谢你