簡體   English   中英

SQL向查詢添加變量

[英]SQL add a variable to a query

如何創建一次指定的變量,然后在以后的腳本查詢中使用? 這些變量可以在查詢中多次使用,也可以在腳本的多個查詢中多次使用。 在下面的示例中,我將@x用作此類變量。

我想做的是這樣的:

Declare @Query nvarchar(1000)
Declare @x nvarchar(40)

Set @x = 'test'
Set @Query = 'Select [Name]
                     , ' + @x + ' as [TestCase]
              From mytable'

Exec (@Query)

-- returns "Invalid column name 'test'"

返回上面提到的錯誤。 我希望它達到以下效果:

Declare @Query nvarchar(1000)
Declare @x nvarchar(40)

Set @x = 'test'
Set @Query = 'Select [Name]
                     , ''test'' as [TestCase]
              From mytable'

Exec (@Query)

-- Returns e.g.
-- Name   TestCase
-- Alice  Test
-- Bob    Test

我還注意到以下內容不起作用,並返回與第一個相同的錯誤:

Declare @Query nvarchar(1000)
Declare @x nvarchar(40)

Set @x = 'test'
Set @Query = 'Select [Name]
                     , ' + 'test' + ' as [TestCase]
              From mytable'

Exec (@Query)

-- returns "Invalid column name 'test'"

基於該錯誤,並且由於我不嘗試將@x用作列名,而只是將其用作變量,因此我假設我正在使用變量的無效實現。

由於您不打算將變量用作列名,因此根本不需要使用動態SQL。 (這是一件好事,因為動態SQL的攻擊面很大,因此應格外謹慎。)

一個簡單的:

declare @x nvarchar(40)

set @x = 'test'

select [Name], @x as TestCase
from mytable

會做。


話雖這么說,如果您有一個用於動態SQL的用例(同樣,這里所涉及的特定查詢沒有,但是可能正在向該過程傳遞一個臨時查詢),那么要做的就是將變量傳遞為通過sp_executesql查詢的參數。 這類似於使用參數創建存儲過程:

declare @x nvarchar(40)
declare @query nvarchar(1000)

set @x = 'test'

set @query = 'select [Name], @x as TestCase from mytable'

exec sp_executesql @query, N'@x nvarchar(1000)', @x

您缺少引號。 而已。 嘗試下面的代碼。

 Declare @Query nvarchar(1000)
    Declare @x nvarchar(40)

    Set @x = 'test'
    Set @Query = 'Select [Name]
                         , ''' + @x + ''' as [TestCase]
                  From mytable'

    Exec (@Query)
Declare @Query nvarchar(1000)
Declare @x nvarchar(40)

Set @x = 'test'
Set @Query = 'Select [Name],'++''''+@x+''''+ ' as [TestCase]
              From mytable'

print @query

輸出:
從mytable中選擇[名稱],“測試”作為[TestCase]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM