sql-server - 是否可以在 SQL 中选择一个 select 而无需创建 nvarchar 变量?

标签 sql-server

我正在尝试做这样的事情:

--This table has a list of columns I need from #testTableTwo
CREATE TABLE #testTableOne
(
    id  nvarchar(250)
)

--This column has the values I need. I just don't know which columns I want.
CREATE TABLE #testTableTwo
(
    one INT,
    two INT,
    three INT,
    four int
)



INSERT INTO #testTableOne VALUES ('one'),('two'),('three')
INSERT INTO #testTableTwo VALUES (1,2,3,4)
    SELECT (SELECT * FROM #testTableOne) FROM #testTableTwo

所以我想要的是:

SELECT ONE, TWO, THREE FROM #testTableTwo

这可能吗?我知道我可以制作一个 nvarchar 并使用 COALESCE 做一些事情,但我试图避免这种情况。有什么好的办法吗?

最佳答案

您必须像这样使用动态 SQL。

-- First construct the fields list
DECLARE @fields varchar(500)
SET @fields = STUFF((SELECT ', ' + #testTableOne.id
                FROM #testTableOne
                FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)')
            , 1, 2, '')

-- Next construct the actual SQL statement
DECLARE @sql nvarchar(max)
SET @sql = 'SELECT '+@fields+' FROM #testTableTwo'

-- And last but not least run it.
EXEC sp_executesql @sql

关于sql-server - 是否可以在 SQL 中选择一个 select 而无需创建 nvarchar 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418184/

相关文章:

c# - 在 SQL Server 2014 中为不安全的程序集创建非对称 key

sql-server - 从 sql server 链接服务器连接到 Sphinx

sql - 子查询中错误命名的字段导致加入

c# - 如何在sql中获取下一个自增值

sql - 强制 Oracle 使用 SKIP LOCKED 返回前 N 行

C# 未将对象引用设置为对象的实例

sql-server - 如何在不使用 IDENTITY 的情况下自动递增列?

sql - 检测 SQL Server 2000 中的上次登录日期/时间

c# - EFcore 中 'id' 操作的结果中不存在所需的列 `FromSql`

SQL Server 和类型的隐式转换