Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态SQL-从SQL中逗号分隔的变量中选择表名_Sql_Tsql_Sql Server 2012 - Fatal编程技术网

动态SQL-从SQL中逗号分隔的变量中选择表名

动态SQL-从SQL中逗号分隔的变量中选择表名,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,在上面的查询中,我试图从变量@tablename获取表名。这是一个逗号分隔的值。 我对在循环中使用每个表的名称感兴趣。我该怎么做?以下是我要做的。感谢您的反馈 DECLARE @tablename as varchar(MAX); SET @tablename = '[dbo].[A_E_att_rate] ,[Acute_total_cost] ,[Average_los]

在上面的查询中,我试图从变量@tablename获取表名。这是一个逗号分隔的值。
我对在循环中使用每个表的名称感兴趣。我该怎么做?

以下是我要做的。感谢您的反馈

 DECLARE @tablename as varchar(MAX);
  SET  @tablename = '[dbo].[A_E_att_rate]
                    ,[Acute_total_cost]
                    ,[Average_los]
                    ,[D_days]
                    ,[days_1000]
                    ,[rate]';

    WHILE (SELECT * from [dbo].[fnSplitListToTable](@tablename)) > 0
    BEGIN
    EXEC(' SELECT t.[Commissionercode],
                t.[RiskBand Qadm],
                x.Col,
                x.Value
                FROM' + @tablename +' t
            CROSS APPLY 
            (
                VALUES
                    (''August'', t.[Sum of Aug12-Jul13]),
                    (''July'', t.[Sum of Jul12-Jun13]),
                    (''June'', t.[Sum of Jun12-May13]),
                    (''May'', t.[Sum of May12-Apr13]),
                    (''April'', t.[Sum of Apr12-Mar13])
            ) x (Col, Value)')

END

你的循环是错误的。我将字符串变量拆分为一个表变量,并在其上循环如下:我可以使用什么来逐个获取每一行..我的拆分函数只返回每个文本,您需要在FROM和表名之间留一个空格!谢谢大家。我从@KM的第一条评论中得到了解决方案。我用游标来做这个
DECLARE @tablename as varchar(MAX), @d AS nvarchar(100), @SQL NVARCHAR(MAX);
  SET  @tablename = N'[dbo].[A_E_att_rate],[Acute_total_cost],[Average_los],[D_days],[days_1000],[rate]';
  SET @d = N',';
    SET @SQL = N'';
;WITH
t AS
(
    SELECT
       CAST(@tablename AS NVARCHAR(MAX)) AS tn,
       CAST(@tablename AS NVARCHAR(MAX)) AS r,
       CAST(0 AS INT) AS i
    UNION ALL
    SELECT
       CASE WHEN CHARINDEX(@d, r) <> 0 THEN
       CAST(
          STUFF(r, CHARINDEX(@d, r), LEN(r), N'')
          AS NVARCHAR(MAX))
          ELSE
          r
          END
          ,
       CASE WHEN CHARINDEX(@d, r) <> 0 THEN
       CAST(
          STUFF(r, 1, CHARINDEX(@d, r), N'')
          AS NVARCHAR(MAX))
          ELSE
          NULL
          END
          ,
       i + 1
    FROM
       t
    WHERE
       r IS NOT NULL
)
SELECT @SQL = N'SELECT t.[Commissionercode], t.[RiskBand Qadm], x.Col, x.Value FROM ' + tn + N' AS t CROSS APPLY 
            (
                VALUES
                    (''August'', t.[Sum of Aug12-Jul13]),
                    (''July'', t.[Sum of Jul12-Jun13]),
                    (''June'', t.[Sum of Jun12-May13]),
                    (''May'', t.[Sum of May12-Apr13]),
                    (''April'', t.[Sum of Apr12-Mar13])
            ) x (Col, Value)' FROM t WHERE i > 0

EXEC sp_executesql @SQL