英文:
How to properly form an array loop to use in an SQL statement
问题
我正在尝试使用数组提取表信息。我的数组构建似乎没问题,它包含了正确数量的行。
到目前为止,这是我的代码:
DECLARE @myTableVariable TABLE (name varchar(30))
insert into @myTableVariable SELECT [NAME] FROM SYS.DATABASES
SELECT
TABLE_CATALOG AS 'DATABASE',
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM @myTableVariable.information_schema.columns
我希望我的问题有意义!提前感谢!
我知道在SQL语句部分需要使用某种循环,但我不确定如何正确地构建它。我一直在查找,但没有找到答案。
英文:
I am trying to use an array to pull table information. My array build seems to be fine and it is created with the correct number of rows.
THis is what I have so far:
DECLARE @myTableVariable TABLE (name varchar(30))
insert into @myTableVariable SELECT [NAME] FROM SYS.DATABASES
SELECT
TABLE_CATALOG AS 'DATABASE',
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM @myTableVariable.information_schema.columns
I hope my question makes sense! Thanks in advance!
I know there needs to be some sort of WHILE loop around the SQL statement portion, but I am unsure how to properly form it. I have been looking around with no luck.
答案1
得分: 1
你可以通过一点动态SQL来实现你尝试做的事情。
在SQL Server中,我更倾向于使用系统DMV而不是Information_Schema(后者实际上只是为了兼容性而存在),但是假设你有访问数据库的权限并且没有冲突的字符集,以下内容应该有所帮助:
declare @Sql nvarchar(max);
with db as (select name from master.sys.databases where database_id > 4)
select @Sql = string_agg(Convert(nvarchar(max), Concat(N'
select
TABLE_CATALOG as [DATABASE],
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
from ', QuoteName(db.name), N'.information_schema.columns')), N' union all ')
from db;
select @Sql;
exec (@Sql);
英文:
You can achieve what you're trying to do with a little bit of Dynamic SQL.
In SQL Server I would prefer to use the system DMVs instead of Information_Schema (which really only exist for compatability) however, assuming you have permission to access the database(s) and don't have conflicting collations, the following should help:
declare @Sql nvarchar(max);
with db as (select name from master.sys.databases where database_id > 4)
select @Sql = string_agg(Convert(nvarchar(max), Concat(N'
select
TABLE_CATALOG as [DATABASE],
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
from ', QuoteName(db.name), N'.information_schema.columns')), N' union all ')
from db;
select @Sql;
exec (@Sql);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论