5

「exec (string)」から返されるものを変数に割り当てたいのですが、構文に苦労しています。以下はいくつかの作業コードです...

declare @iGeographyLevel int = 2
declare @iGeographyLevelID int = 64
declare @sGeographyName varchar(30)

declare @sSQL nvarchar(max)

set @sSQL = '
select Name
    from GeographyLevel'+ cast(@iGeographyLevel as varchar(5))+'
    where GeographyLevel'+ cast(@iGeographyLevel as varchar(5)) + 'ID = '+ cast(@iGeographyLevelID as varchar(5))

exec (@sSQL)

私は次のようなことをしたいと思います...

set @sGeographyName  = exec (@sSQL)
4

1 に答える 1

8

sp_executesqlこれを行う最良の方法です。

DECLARE @iGeographyLevel INT = 2
DECLARE @iGeographyLevelID INT = 64
DECLARE @sGeographyName VARCHAR(30)
DECLARE @sSQL NVARCHAR(max)

SET @sSQL = '
SELECT @sGeographyName = Name
FROM   GeographyLevel' + cast(@iGeographyLevel AS VARCHAR(5)) + '
WHERE  GeographyLevel' + cast(@iGeographyLevel AS VARCHAR(5)) + 'ID = @iGeographyLevelID'

EXEC sp_executesql
  @sSQL,
  N'@iGeographyLevelID INT, @sGeographyName VARCHAR(30) OUTPUT',
  @iGeographyLevelID,
  @sGeographyName OUTPUT

SELECT @sGeographyName 

ただし、ここでの動的 SQL の要件は少し臭いです。Geography列を持つテーブルを1 つだけ持たない理由がわかりません(または、テーブルを分離する必要Levelがある場合は、パーティション化されたビューの可能性があります)。また、変数名のハンガリー語表記は、最近では広く推奨されていません。

于 2013-01-12T14:27:33.383 に答える