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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

不幸的是,SQL Server 2005中沒(méi)有簡(jiǎn)單的方法。盡管如此,Lukasz的答案對(duì)于SQL Server 2008是正確的,而且該功能早就該了。


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


DECLARE @psuedotable xml


SELECT

    @psuedotable = ...

FROM

    ...

FOR XML ...


SELECT ... dbo.MyUDF (@psuedotable)

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


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


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


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


查看完整回答
反對(duì) 回復(fù) 2019-12-02
?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以,但是沒(méi)有任何表格。從文檔:


對(duì)于Transact-SQL函數(shù),允許所有數(shù)據(jù)類型,包括CLR用戶定義類型和用戶定義表類型,但時(shí)間戳數(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ù)您要實(shí)現(xiàn)的目標(biāo),可以修改此代碼。


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


DECLARE @myTable TableType

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


INSERT INTO @myTable(field_name)

SELECT field_name_2 FROm my_other_table


查看完整回答
反對(duì) 回復(fù) 2019-12-02
?
尚方寶劍之說(shuō)

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

第1步:創(chuàng)建一個(gè)名為T(mén)ableType的表類型,該表將接受具有一個(gè)varchar列的表


create type TableType

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

步驟2:創(chuàng)建一個(gè)函數(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:將具有一個(gè)varchar列的表傳遞給用戶定義的類型TableType,并在函數(shù)中使用“,”作為分隔符


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


查看完整回答
反對(duì) 回復(fù) 2019-12-02
  • 3 回答
  • 0 關(guān)注
  • 714 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)