第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將表作為參數(shù)傳遞到SQL Server UDF中

將表作為參數(shù)傳遞到SQL Server UDF中

慕俠2389804 2019-12-02 12:59:17
我想將表格作為參數(shù)傳遞給定標器UDF。我還希望將參數(shù)限制為僅包含一列的表。(可選的)這可能嗎?編輯我不想傳遞表名,我想傳遞數(shù)據(jù)表(我想作為參考)編輯我希望我的Scaler UDF基本上取一個值表并返回行的CSV列表。IE瀏覽器col1  "My First Value"  "My Second Value"..."My nth Value"會回來"My First Value, My Second Value,... My nth Value"我想對表格進行一些過濾,IE確保沒有空值并確保沒有重復項。我期待著以下方面的事情:SELECT dbo.MyFunction(SELECT DISTINCT myDate FROM myTable WHERE myDate IS NOT NULL)
查看完整描述

3 回答

?
慕勒3428872

TA貢獻1848條經(jīng)驗 獲得超6個贊

不幸的是,SQL Server 2005中沒有簡單的方法。盡管如此,Lukasz的答案對于SQL Server 2008是正確的,而且該功能早就該了。


任何解決方案都將涉及臨時表,或者傳入xml / CSV并在UDF中進行解析。示例:更改為xml,在udf中解析


DECLARE @psuedotable xml


SELECT

    @psuedotable = ...

FROM

    ...

FOR XML ...


SELECT ... dbo.MyUDF (@psuedotable)

不過,您想在更大范圍內(nèi)做什么?可能還有另一種方式可以做到這一點...


編輯:為什么不以字符串形式傳遞查詢,并使用帶有輸出參數(shù)的存儲過程


注意:這是未經(jīng)測試的代碼,您需要考慮SQL注入等。但是,它也滿足您的“單列”要求,并且應該對您有所幫助


CREATE PROC dbo.ToCSV (

    @MyQuery varchar(2000),

    @CSVOut varchar(max)

)

AS

SET NOCOUNT ON


CREATE TABLE #foo (bar varchar(max))


INSERT #foo

EXEC (@MyQuery)


SELECT

    @CSVOut = SUBSTRING(buzz, 2, 2000000000)

FROM

    (

    SELECT 

        bar -- maybe CAST(bar AS varchar(max))??

    FROM 

        #foo

    FOR XML PATH (',')

    ) fizz(buzz)

GO


查看完整回答
反對 回復 2019-12-02
?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

您可以,但是沒有任何表格。從文檔:


對于Transact-SQL函數(shù),允許所有數(shù)據(jù)類型,包括CLR用戶定義類型和用戶定義表類型,但時間戳數(shù)據(jù)類型除外。


您可以使用用戶定義的表類型。


用戶定義表類型的示例:


CREATE TYPE TableType 

AS TABLE (LocationName VARCHAR(50))

GO 


DECLARE @myTable TableType

INSERT INTO @myTable(LocationName) VALUES('aaa')

SELECT * FROM @myTable

因此,您可以做的是定義表類型,例如TableType定義使用該類型參數(shù)的funcion示例函數(shù):


CREATE FUNCTION Example( @TableName TableType READONLY)

RETURNS VARCHAR(50)

AS

BEGIN

    DECLARE @name VARCHAR(50)


    SELECT TOP 1 @name = LocationName FROM @TableName

    RETURN @name

END

該參數(shù)必須為READONLY。用法示例:


DECLARE @myTable TableType

INSERT INTO @myTable(LocationName) VALUES('aaa')

SELECT * FROM @myTable


SELECT dbo.Example(@myTable)

根據(jù)您要實現(xiàn)的目標,可以修改此代碼。


編輯: 如果您在表中有一個數(shù)據(jù),您可以創(chuàng)建一個變量:


DECLARE @myTable TableType

并從表中獲取數(shù)據(jù)到變量


INSERT INTO @myTable(field_name)

SELECT field_name_2 FROm my_other_table


查看完整回答
反對 回復 2019-12-02
?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

第1步:創(chuàng)建一個名為TableType的表類型,該表將接受具有一個varchar列的表


create type TableType

as table ([value] varchar(100) null)

步驟2:創(chuàng)建一個函數(shù),該函數(shù)將上面聲明的TableType用作表值參數(shù),并將字符串值作為分隔符


create function dbo.fn_get_string_with_delimeter (@table TableType readonly,@Separator varchar(5))

returns varchar(500)

As

begin


    declare @return varchar(500)


    set @return = stuff((select @Separator + value from @table for xml path('')),1,1,'')


    return @return


end

步驟3:將具有一個varchar列的表傳遞給用戶定義的類型TableType,并在函數(shù)中使用“,”作為分隔符


select dbo.fn_get_string_with_delimeter(@tab, ',')


查看完整回答
反對 回復 2019-12-02
  • 3 回答
  • 0 關注
  • 731 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號