Как я могу сделать этот запрос для принятия динамических имен таблиц? - PullRequest
0 голосов
/ 11 мая 2011

Это моя функция, которая в основном объединяет все данные строк в одну строку. Я знаю, что функция с именем 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 ]

2 голосов
/ 11 мая 2011

Вам нужно будет использовать динамический SQL .

Это единственный способ параметризации имен таблиц.

1 голос
/ 11 мая 2011

Это не совсем то, что вы ищете, но это может указать вам правильное направление. При этом используется динамический sql и аккуратный трюк для объединения в 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 '+@SQL+' from '+@TableName

exec sp_ExecuteSQL @SQL,N''

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...