sql - 如何获取所有表名、列名、列值及其约束?
问题描述
我正在使用这个查询,它显示了我想要获取这些值的约束的数据库的表名列名和列值。
DECLARE @SearchStr nvarchar(100)
CREATE TABLE #Results (TableName nvarchar(370),ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT '''+@TableName+''',''' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) '
)
END
END
END
SELECT Tablename,ColumnName, ColumnValue FROM #Results
DROP TABLE #Results
解决方案
推荐阅读
- html - 我的 flexbox 容器对 flex-direction:column 没有响应
- python - 如何在 pandas 中使用 melt() 和 Stack()
- ruby-on-rails - Gem 'byebug' 未在开发中使用
- php - 使用带有 Mysql 和 PHP 的 Haversine 公式过滤搜索值
- mysql - 如何在 MySQL 的 if 中使用 select
- php - 以某种方式准备MySQL查询会导致错误,即使参数正确?
- python - Django-Rest-Framework Serializer 验证数据返回无
- conv-neural-network - 空间变换网络如何学习适当地变换图像?
- javascript - 不能 app.use 在我的 index.js 文件中使用两个不同的路由器
- python - Pandas:使用 loc 将一行布尔值附加到 df 更改为 int