2011-05-11 6 views
0

これは、主にすべての行データを1つの文字列に連結する機能です。私はCoallasceという名前の関数が利用可能であることを知っていますが、テーブル名を動的に受け入れるようにこの関数を変更する方法を知りたいだけです。現在、Employeeテーブルからのみ読み込みます。事前に動的なテーブル名を受け入れるためにこのクエリを作成するにはどうすればよいですか?

ALTER FUNCTION [dbo].[ConcatStrig] 
(
    @TableName varchar(64), 
    @FieldName varchar(64) 
) 
RETURNS varchar(max) 
AS 
BEGIN 
    Declare @Sql as varchar(max) = '' 
    Set @Sql = 'Select ' + @FieldName + ' from ' + @TableName 

    Declare curTemp Cursor For 
     Select EmpName from sp_executesql(@Sql) 
    Declare @StrTemp as varchar(max) 
    Declare @String as varchar(max) = '' 
    Open curTemp 

    Fetch Next from curTemp into @StrTemp 

    While @@Fetch_Status = 0 
    Begin 
     Set @String = @String + ' ' + @StrTemp 

     Fetch Next from curTemp into @StrTemp 
    End 
    Close curTemp 
    Deallocate  curTemp 
    Return @String 
END 

感謝:)

答えて

2

あなたはdynamic SQLを使用する必要があります。

これは、テーブル名をパラメータ化する唯一の方法です。

1

これはあなたが探しているものではありませんが、正しい方向を指摘する可能性があります。これは、動的XMLとFor XML Path( '')の連結のための素敵なトリックを使用します。

declare @SQL nvarchar(max), @TableName nvarchar(max) 
set @TableName='dbo.vwAsset' 
set @SQL=(select 'cast(isnull('+name+','''') as nvarchar)+'' ''+' 
from sys.columns where object_id=object_id(@TableName) 
for XML Path('') 
) 

set @SQL=LEFT(@SQL,LEN(@SQL)-1) 

set @SQL='select '[email protected]+' from '[email protected] 

exec sp_ExecuteSQL @SQL,N'' 

これが役立ちます。

関連する問題