我正在嘗試使用存盤程序在 SQL Server 中生成一個字串。
假設我有一張桌子
ID FileKey
1 AEDAT
2 ERDAT
現在我想生成一個字串如下:
AEDAT GT LastUpdatedValue OR ERDAT GT LastUpdatedValue
現在,如果上表只包含一行 (With FileKey) AEDAT 那么結果字串應該是
AEDAT GT LastUpdatedValue <---No OR operator
如果上表中有 3 或 4 行,則結果字串將類似于:
AEDAT GT LastUpdatedValue OR ERDAT GT LastUpdatedValue OR MCVBL GT LastUpdatedValue...
現在為了達到同樣的目的,我采取了以下方法:
DECLARE @ColumnName varchar(50)
SELECT @ColumnName = STRING_AGG(x.ColumnName 'GT LastUpdatedValue',' OR ') FROM <table_name> x;
綜上所述,我有兩個問題:
- 以上不作業,即我沒有得到
@ColumnName值AEDAT,ERDAT。我缺少什么?--- 這個解決了。 - 假設我得到
@ColumnName的AEDAT,ERDAT。如何生成上面給出的動態和條件字串?--- 現在也解決了。
uj5u.com熱心網友回復:
看起來您需要以下內容
DECLARE @ColumnName varchar(50) = (
SELECT
STRING_AGG(CAST(x.ColumnName ' GT LastUpdatedValue' AS varchar(max)), ' OR ')
WITHIN GROUP (ORDER BY x.ID)
FROM <table_name> x
);
您需要強制轉換為(max)否則它會在 8000 個字符(或 4000 個字符nvarchar)處被截斷
uj5u.com熱心網友回復:
declare @t table(ID int, FileKey varchar(20))
insert into @t values
(1, 'AEDAT'),
(2 , 'ERDAT')
SELECT TOP 1
(
SELECT FileKey ' GT LastUpdatedValue' CASE
WHEN id < 2
THEN ' OR '
ELSE ''
END
FROM @t t1 FOR XML PATH('')
)
FROM @t t;
如果您共享確切的表和要求,那么WHEN id < 2可以以其他動態和有效的方式處理邏輯之類的 。OR使用字串操作洗掉 last可能會很長。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365090.html
標籤:sql-server
