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 に答える