Sql 如何从表中选择存储在带有“QUOTE”的列中的名称;“0”;另一个表中的前缀
我需要能够从一个表中选择所有内容,该表的名称存储在某个带有“0”前缀的表的列中 我有一个表,其中有一个“参数”列,用于存储一些不同的数据。其中一些数据是前缀为“0”的临时表名。例如“0,awfhe”,只有“awfhe”是表名。(左侧始终只有2个字符)。 但并非“argument”列中的每个值都是表名 我写了这样一个查询: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
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”——正确的表名。