【问题标题】:Declare dynamic Variables from a table从表中声明动态变量
【发布时间】:2014-12-31 04:04:54
【问题描述】:

我想将我的动态 SQL 变量声明为一个表。 基本上我有一个这样的“假设”表

City   BranchID Name
London 101      London Branch
Munich 102      Munich Branch

我已经试过了:

DECLARE @Cit varchar(75)
SET @Lob = 'London'

SET @ID= 'SELECT BranchID FROM dbo.assumptions WHERE city = @city'
SET @Name= 'SELECT Name FROM dbo.assumptions WHERE city= @city'

EXECUTE sp_executesql @ID, N'@city nvarchar(75)', @city= @city
EXECUTE sp_executesql @Name_Net, N'@city nvarchar(75)', @city= @city

这给了我正确的结果 101和伦敦分店

问题是我想稍后使用这些变量,例如

SELECT * From Sales where BranchID = @ID

我知道该怎么做。但是现在这给了我

SELECT * From Sales where BranchID = SELECT BranchID FROM dbo.assumptions WHERE city = 'London'

这当然行不通。我需要@ID 才能得到“101”

有什么想法吗?

【问题讨论】:

    标签: sql sql-server-2008 dynamic declare


    【解决方案1】:
    DECLARE @city VARCHAR(75),
            @string1 NVARCHAR(MAX),
            @string2 NVARCHAR(MAX),
            @ID INT,
            @Name VARCHAR(100)
    
    SET @string1= 'SELECT @ID = BranchID FROM dbo.assumptions WHERE city = @city'
    SET @string2= 'SELECT @Name = Name FROM dbo.assumptions WHERE city= @city'  
    
    EXECUTE sp_executesql @string1, N'@ID int output, @city nvarchar(75)',@ID OUTPUT, @city= @city
    EXECUTE sp_executesql @string2, N'@Name varchar(100) output, @city nvarchar(75)',@Name OUTPUT, @city= @city
    
    SELECT @ID,@Name
    

    附:可能有一些编译错误,因为我没有;实际上没有这个表

    【讨论】:

      【解决方案2】:

      使用子查询

      SELECT * From Sales where BranchID in( SELECT BranchID FROM dbo.assumptions WHERE city = 'London')
      

      【讨论】:

      • 您好,感谢您的回答。这对于我的具体示例来说没问题。另一个例子是 SELECT * , @ID as ID From SALES
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多