Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 如何从表中选择存储在带有“QUOTE”的列中的名称;“0”;另一个表中的前缀_Sql_Sql Server_Select - Fatal编程技术网

Sql 如何从表中选择存储在带有“QUOTE”的列中的名称;“0”;另一个表中的前缀

Sql 如何从表中选择存储在带有“QUOTE”的列中的名称;“0”;另一个表中的前缀,sql,sql-server,select,Sql,Sql Server,Select,我需要能够从一个表中选择所有内容,该表的名称存储在某个带有“0”前缀的表的列中 我有一个表,其中有一个“参数”列,用于存储一些不同的数据。其中一些数据是前缀为“0”的临时表名。例如“0,awfhe”,只有“awfhe”是表名。(左侧始终只有2个字符)。 但并非“argument”列中的每个值都是表名 我写了这样一个查询: DECLARE @agrtid INT = 0 WHILE(@AGRTID<10) BEGIN SET @agrtid = @agrtid+1; DEC

我需要能够从一个表中选择所有内容,该表的名称存储在某个带有“0”前缀的表的列中

我有一个表,其中有一个“参数”列,用于存储一些不同的数据。其中一些数据是前缀为“0”的临时表名。例如“0,awfhe”,只有“awfhe”是表名。(左侧始终只有2个字符)。 但并非“argument”列中的每个值都是表名

我写了这样一个查询:

DECLARE @agrtid   INT = 0
WHILE(@AGRTID<10) 
BEGIN      
SET @agrtid = @agrtid+1;
DECLARE @sql NVARCHAR(MAX) = ''

IF EXISTS (Select agrtid from awftrans)


SELECT @sql = @sql +
'SELECT
*
FROM awftrans A
JOIN ' + QUOTENAME(wf_table_name) + ' B
ON A.wf_group = B.wf_group
where A.wf_group IS NOT NULL
UNION ALL
'
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid = @agrtid
) t

IF @sql <> '' BEGIN
-- Remove the last UNION ALL
SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

PRINT @sql

EXEC sp_executesql
    @sql,
    N'@agrtid INT',
    @agrtid
END
END
  (...)
  FROM awftrans A
 JOIN ' + QUOTENAME(RIGHT(argument)-2) + ' B
     ON A.wf_group = B.wf_group
    where A.wf_group IS NOT NULL
    UNION ALL
 '
 FROM (
    SELECT DISTINCT (RIGHT(argument)-2) FROM awftrans WHERE agrtid = @agrtid
 ) t
  (...)
 DECLARE @agrtid   INT = 0
 WHILE(@AGRTID<10) 
 BEGIN      
 SET @agrtid = @agrtid+1;
 DECLARE @sql NVARCHAR(MAX) = ''

 IF EXISTS (Select agrtid from awftrans)

 SELECT @sql = @sql +
 'SELECT
  *
 FROM awftrans A
 JOIN ' + QUOTENAME(argument) + ' B
  ON A.wf_group = B.wf_group
 where A.wf_group IS NOT NULL
 UNION ALL
'
FROM (
 SELECT DISTINCT argument FROM awftrans WHERE agrtid = @agrtid
 ) t

 IF @sql <> '' BEGIN
   -- Remove the last UNION ALL
    SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

   PRINT @sql

    EXEC sp_executesql
       @sql,
       N'@agrtid INT',
       @agrtid
END
END
//编辑2:

问题是,当我写这样一个查询时:

DECLARE @agrtid   INT = 0
WHILE(@AGRTID<10) 
BEGIN      
SET @agrtid = @agrtid+1;
DECLARE @sql NVARCHAR(MAX) = ''

IF EXISTS (Select agrtid from awftrans)


SELECT @sql = @sql +
'SELECT
*
FROM awftrans A
JOIN ' + QUOTENAME(wf_table_name) + ' B
ON A.wf_group = B.wf_group
where A.wf_group IS NOT NULL
UNION ALL
'
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid = @agrtid
) t

IF @sql <> '' BEGIN
-- Remove the last UNION ALL
SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

PRINT @sql

EXEC sp_executesql
    @sql,
    N'@agrtid INT',
    @agrtid
END
END
  (...)
  FROM awftrans A
 JOIN ' + QUOTENAME(RIGHT(argument)-2) + ' B
     ON A.wf_group = B.wf_group
    where A.wf_group IS NOT NULL
    UNION ALL
 '
 FROM (
    SELECT DISTINCT (RIGHT(argument)-2) FROM awftrans WHERE agrtid = @agrtid
 ) t
  (...)
 DECLARE @agrtid   INT = 0
 WHILE(@AGRTID<10) 
 BEGIN      
 SET @agrtid = @agrtid+1;
 DECLARE @sql NVARCHAR(MAX) = ''

 IF EXISTS (Select agrtid from awftrans)

 SELECT @sql = @sql +
 'SELECT
  *
 FROM awftrans A
 JOIN ' + QUOTENAME(argument) + ' B
  ON A.wf_group = B.wf_group
 where A.wf_group IS NOT NULL
 UNION ALL
'
FROM (
 SELECT DISTINCT argument FROM awftrans WHERE agrtid = @agrtid
 ) t

 IF @sql <> '' BEGIN
   -- Remove the last UNION ALL
    SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

   PRINT @sql

    EXEC sp_executesql
       @sql,
       N'@agrtid INT',
       @agrtid
END
END

我需要在这个sql语句中去掉“0”前缀。

您可以使用
LIKE
谓词将参数与表名匹配,因此不要使用
agrtid=@agrtid
而是使用
agrtid LIKE'%+@agrtid+'%

...
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid LIKE '%' + @agrtid + '%'
) t
...

您可以使用
LIKE
谓词将参数与表名相匹配,因此使用
agrtid=@agrtid
而不是
agrtid LIKE'%+@agrtid+'%'

...
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid LIKE '%' + @agrtid + '%'
) t
...

以上查询仅是正确的。
但是不要使用Quotename函数,而是使用stuff函数“stuff(wf_table_name,1,2,”)来删除前2个字符,这将给出表名,并且在if条件下使用9而不是11,因为联合长度仅为9

,上述查询仅是正确的。
但是不要使用Quotename函数,而是使用stuff函数“stuff(wf_table_name,1,2,”)来删除前2个字符,这将为您提供表名,并且在if条件下,使用9而不是11作为union的长度all仅为9

您可以使用
like
比较,因此您可以使用'like'0%'返回从0开始的所有内容awftrans表中的“wf_table_name”和“argument”。这两个表中都存储了表名。我在上面为“wf_table_name”列编写了查询,但看起来“argument”列也需要它。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”“-正确的表名。您可以使用
like
比较,因此您可以使用'like'0%'返回awftrans表中以0“wf_table_name”和“argument”开头的所有内容。它们中都存储有表名。我在上面为“wf_table_name”列编写了查询,但看起来我也需要为“argument”列编写查询。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”——正确的表名。谢谢你的回答,但这不是我的意思。我对问题进行了更精确的编辑。@KSiuda我仍然不明白,请您提供一些参数和表名的示例。awftrans表中的“wf_表名”和“参数”。它们中都存储有表名。我在上面为“wf_table_name”列编写了查询,但看起来我也需要为“argument”列编写查询。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”——正确的表名。谢谢你的回答,但这不是我的意思。我对问题进行了更精确的编辑。@KSiuda我仍然不明白,请您提供一些参数和表名的示例。awftrans表中的“wf_表名”和“参数”。它们中都存储有表名。我在上面为“wf_table_name”列编写了查询,但看起来我也需要为“argument”列编写查询。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”-正确的表名。嘿,谢谢你的回答。您可以看一下awftrans表格中编辑的问题吗?“wf_table_name”和“argument”。它们中都存储有表名。我在上面为“wf_table_name”列编写了查询,但看起来我也需要为“argument”列编写查询。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”-正确的表名。嘿,谢谢你的回答。您可以看一下awftrans表格中编辑的问题吗?“wf_table_name”和“argument”。它们中都存储有表名。我在上面为“wf_table_name”列编写了查询,但看起来我也需要为“argument”列编写查询。问题是“argument”列中的表名总是有“0”前缀,例如“0,awfhe”而不是“awfhe”——正确的表名。