2013-12-03 6 views
0

Это, наверное, странный вопрос ... Надеюсь, кто-то насладится более эзотерической частью SQL. :)SQL View Columns

У меня есть несколько просмотров со многими столбцами. Ширины столбцов препятствуют просмотру данных. После того, как ширина столбца настраивается вручную, и представление сохраняется, столбец постоянно сохраняется на этой ширине, если он не будет вручную изменен и снова сохранен.

Это заставляет меня задаться вопросом, как SQL сохраняет ширину столбцов. Есть ли таблица, содержащая эти данные? Если да, может ли обновленный запрос изменить все столбцы для данной таблицы на определенную ширину? Если да, то как?

Просто FYI, мой администратор базы данных и я провели хорошо, пытаясь понять это. Я не прошу, не пытаясь самостоятельно решить эту проблему. Я новичок в SQL и надеюсь на более опытные рекомендации.

+2

Это не вопрос SQL Server. Какую программу вы используете для отображения ваших данных? (Кроме того, «view» - это конкретная концепция SQL, которая не относится к ширине столбцов) – Anon

+0

Я использую BIDS для взаимодействия с SQL. «Вид» - это объект, с которым были запрошены данные. Я не понимаю различия между представлением и запросом, но я считаю, что представление не может изменять данные. В любом случае, я считаю, что этот вопрос относится к обоим представлениям и запросам. – Uziel

ответ

1

Они хранятся в расширенных свойствах. Вы можете просмотреть их либо в окне свойств для рассматриваемого вида, либо путем их написания. Если вы создаете скрипты, вам нужно убедиться, что вы выбрали вариант сценария расширенных свойств, скрытых за расширенной кнопкой. Вы также можете установить параметры по умолчанию в параметрах SSMS. Обратите внимание, что если вы не использовали конструктор представлений, расширенных свойств не будет.

0

Решение: использовать sp_refreshview (это пример показывает, что SQL Server автоматически не обновляет информацию о метаданных для dbo.MyView после того, как изменить максимальную длину dbo.MyTable.Col2, и мы должны использовать sp_refreshview [или ALTER VIEW, DROP & CREATE] для обновления метаданные для представления):

IF EXISTS(SELECT * FROM sys.views t WHERE t.object_id = OBJECT_ID(N'dbo.MyView')) 
BEGIN 
    DROP VIEW dbo.MyView; 
END 
IF EXISTS(SELECT * FROM sys.tables t WHERE t.object_id = OBJECT_ID(N'dbo.MyTable')) 
BEGIN 
    DROP TABLE dbo.MyTable; 
END 
CREATE TABLE dbo.MyTable 
(
    Col1 INT IDENTITY(1,1) PRIMARY KEY, 
    Col2 VARCHAR(3) NULL 
); 
GO 
CREATE VIEW dbo.MyView 
AS 
SELECT * FROM dbo.MyTable; 
GO 

SELECT cols.COLUMN_NAME, cols.DATA_TYPE, cols.CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS cols 
WHERE cols.TABLE_SCHEMA = 'dbo' 
AND  cols.TABLE_NAME = 'MyView' 
AND  cols.COLUMN_NAME = 'Col2' 
GO 
/* 
COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH 
----------- --------- ------------------------ 
Col2  varchar 3 
*/ 

ALTER TABLE dbo.MyTable 
ALTER COLUMN Col2 VARCHAR(10); 
GO 

SELECT cols.COLUMN_NAME, cols.DATA_TYPE, cols.CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS cols 
WHERE cols.TABLE_SCHEMA = 'dbo' 
AND  cols.TABLE_NAME = 'MyView' 
AND  cols.COLUMN_NAME = 'Col2' 
GO 
/* 
COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH 
----------- --------- ------------------------ 
Col2  varchar 3 
*/ 

EXEC sp_refreshview 'dbo.MyView'; 
GO 
SELECT cols.COLUMN_NAME, cols.DATA_TYPE, cols.CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS cols 
WHERE cols.TABLE_SCHEMA = 'dbo' 
AND  cols.TABLE_NAME = 'MyView' 
AND  cols.COLUMN_NAME = 'Col2' 
GO 
/* 
COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH 
----------- --------- ------------------------ 
Col2  varchar 10 
*/ 
+0

Насколько я могу судить, «CHARACTER_MAXIMUM_LENGTH» не влияет на ширину столбца. --- Запуск запроса ниже, затем настройка ширины столбца и сохранение таблицы, а затем выполнение запроса дает тот же результат. ВЫБРАТЬ COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH ОТ INFORMATION_SCHEMA.COLUMNS AS смещ_по_столбцам WHERE (TABLE_SCHEMA = 'ДБО') AND (TABLE_NAME = 'VTEST') – Uziel

+0

Этот пример показывает только то, что SQL Server не обновляет информацию о метаданных dbo.MyView когда что базовые таблицы (столбцы) изменены. После того, как я изменил максимальную длину столбца, вы можете увидеть, что без sp_refreshview/alter view/drop & create метаданные dbo.MyView не обновляются автоматически. Может быть полезно, если вы предоставляете скрипт для воспроизведения. Вы не предоставили достаточно информации, чтобы воспроизвести вашу проблему. Вы выполнили sp_refreshview? –

+0

@Uziel: после обновления метаданных 'dbo.MyView', используя один из предыдущих методов (например, sp_refresh), вам нужно обновить также набор данных/наборов записей в проекте BIDS. –