目標:在 DECLARE 陳述句中設定多個值以在 WHERE 陳述句中使用。
問題:無法在 SET 陳述句中成功添加多個值。
我要完成的示例:
DECLARE @Beverage as varchar(1000)
SET @Beverage = (‘Water’, ‘Soda’, ‘Wine’, ‘Beer’)
SELECT Beverage
FROM ExampleServer
WHERE Beverage in (@Beverage)
當前正確執行的示例:
DECLARE @Beverage as varchar(1000)
SET @Beverage = (‘Water’)
SELECT Beverage
FROM ExampleServer
WHERE Beverage in (@Beverage)
uj5u.com熱心網友回復:
一個變數可以保存一個標量值,您不能分配多個值。
如果您想硬編碼問題中的值串列,您可以使用值表建構式;然后,您可以從表中選擇并檢查是否存在相關性:
with b as (
select beverage from (values ('Water'), ('Soda'), ('Wine'), ('Beer'))b(beverage)
)
select t.Beverage
from ExampleServer t
where exists (
select * from b
where b.beverage = t.beverage
);
以上是假設SQL Server
uj5u.com熱心網友回復:
您可以使用“ EXEC (@sqlString) ”。這將幫助您動態構建 SQL 查詢,然后使用命令 EXEC 執行它們,就好像它們是存盤程序一樣
DECLARE @BEVERAGE VARCHAR(200),@SQLstring VARCHAR(1000)
SET @BEVERAGE ='(' CHAR(39) 'Water' CHAR(39) ',' CHAR(39) 'Soda' CHAR(39)
',' CHAR(39) 'Wine' CHAR(39) ',' CHAR(39) 'Beer' CHAR(39) ')'
SET @SQLstring = 'SELECT Beverage FROM ExampleServer WHERE Beverage IN
' @BEVERAGE
--SELECT @SQLstring
EXEC (@SQLstring)
- 我使用“CHAR(39)”而不是“'”來避免字串宣告的一些麻煩
uj5u.com熱心網友回復:
將變數宣告為臨時表:
declare @myList table (Beverage varchar(255) )
用值填充它:
insert into @myList values ("Water"), ("Soda"), ("Wine"), ("Beer")
然后你可以使用 in 陳述句:
select Beverage from ExampleServer
where Beverage in (select Beverage from @myList)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/533257.html
標籤:sql
