Is there a way to get the statement that created a view for an existing view in SQL Server 2008? I thought there was a stored procedure or some metadata that had this data, but I'm not finding anything.
6 Answers
Have you had a look at sp_helptext?
sp_helptext 'dbo.name_of_view'
SQL SERVER – Stored Procedure to display code (text) of Stored Procedure, Trigger, View or Object
- 2,233
- 19
- 31
- 156,697
- 29
- 278
- 282
-
The result is splitted in different rows: how to have the actual content in a single string to be used to generate a single sql statement? – ff8mania May 06 '15 at 17:50
-
Full syntax is: `sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]` from [the official MS docs](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-helptext-transact-sql). – DJDaveMark Jun 20 '19 at 20:15
It's in sys.sql_modules. Other schema tables like INFORMATION_SCHEMA ones only contain the first 4000 characters of the definition (they truncate).
- 281,117
- 39
- 423
- 553
Right click on the View name, then left click "SCRIPT VIEW as", then left click "ALTER TO", then left click "NEW QUERY EDITOR WINDOW" -- bingo, your there! To print, click on the script screen and then send to your printer using your toolbar printer icon or click on FILE>>PRINT. Of course, be careful to exit without making any changes. This works the same for stored procedures.
- 31
- 2
You can see the script as code, and copy paste it into an editor like this:
SELECT
v.TABLE_NAME,
v.VIEW_DEFINITION
FROM
INFORMATION_SCHEMA.VIEWS v
WHERE
v.TABLE_NAME LIKE '%%'
and insert the view name you want.
- 15,428
- 6
- 44
- 84
- 21
- 1
-
This worked perfectly, for newbies just put the name of your view in the middle of %% . – Andres Ramos May 10 '18 at 04:58
In case it helps someone in the future, here's a little script I put together to output the creation script for all views in a database.
DECLARE @definition varchar(max)
DECLARE @view CURSOR
SET @view = CURSOR FOR
SELECT m.definition FROM sys.views v INNER JOIN sys.sql_modules m ON m.object_id = v.object_id
OPEN @view
FETCH NEXT FROM @view INTO @definition
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT @definition
PRINT 'GO'
FETCH NEXT FROM @view INTO @definition
END CLOSE @view DEALLOCATE @view
- 25,791
- 19
- 107
- 173