0

我正在使用 SQL Server 2008。我的存储过程必须传递动态数据库名称并将列值存储到变量中

ALTER PROCEDURE [dbo].[proc_testproc](@mUserId int)
AS
declare @logCreate BIT;
declare @dbname sysname;
set @dbname = 'finaldb'

exec('SELECT ua.LogCreate AS ' + @logCreate + ' from '+ @dbname
   + 'dbo.User_Access as ua where ua.UserId=' + @mUserId + ')

IF @logCreate = 1 
--- Below some insertion happens based on the select query output--

谁能帮助我如何传递动态数据库名称并将值存储到变量中?

4

1 回答 1

1

你需要的成分是

基本上,使用 sp_executeSQL 构建要运行的动态 SQL 语句,并将变量传递给它。使用声明为 OUTPUT 参数的变量,它可以将结果带出动态 SQL 语句。

ALTER PROCEDURE [dbo].[proc_testproc](@mUserId int)
AS
declare @logCreate BIT;
declare @dbname sysname;
set @dbname = 'finaldb'

declare @sql nvarchar(max)
set @sql = '
    SELECT @logCreate=ua.LogCreate
    from '+ @dbname + '.dbo.User_Access as ua
    where ua.UserId=@mUserId'
exec sp_executesql @sql,
    N'@logCreate BIT output,@mUserId int',
    @logCreate output, @mUserId

IF @logCreate = 1
于 2012-09-17T11:31:26.167 回答