ALTER FUNCTION [dbo].[ScriptTable_TF](
@TABLE_NAME nvarchar(127),
@ScriptForDb nvarchar(127))
returns @t table(column_ordinal int, sql nvarchar(4000), cname nvarchar(127))
as
begin
insert into @t(column_ordinal, sql, cname) values(0, 'SET XACT_ABORT ON; BEGIN TRAN BEGIN TRY', '')
;WITH A AS
(
SELECT
c.is_identity_column
, c.column_ordinal
, c.name
, c.is_nullable
, c.system_type_name
, c.collation_name
, c.is_xml_document
, c.is_part_of_unique_key
, c.is_computed_column
, cc.definition computed_definition
, dc.definition default_constraint
, (SELECT sc.name AS ColumnName
FROM sys.indexes AS i INNER JOIN
sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id JOIN
sys.columns sc on ic.column_id = sc.column_id and ic.object_id = sc.object_id
WHERE i.is_primary_key = 1
AND OBJECT_NAME(I.object_id) = @TABLE_NAME
AND sc.name collate Latin1_General_CI_AS = c.name collate Latin1_General_CI_AS
) pk
FROM sys.dm_exec_describe_first_result_set('select * from [dbo].[' + @TABLE_NAME +']', NULL, 0) c left JOIN
sys.computed_columns cc on OBJECT_NAME(cc.object_id) = @TABLE_NAME and cc.name collate Latin1_General_CI_AS = c.name collate Latin1_General_CI_AS left join
sys.default_constraints dc on OBJECT_NAME(parent_object_id) = @TABLE_NAME and c.name = COL_NAME(parent_object_id, parent_column_id)
)
insert into @t(column_ordinal, sql, cname)
SELECT TOP 100 PERCENT column_ordinal,
CASE WHEN column_ordinal = 1 THEN
'CREATE TABLE "' + @ScriptForDb + '".dbo."' + @TABLE_NAME + '" ("' + NAME + '"'
ELSE
'ALTER TABLE "' + @ScriptForDb + '".dbo."' + @TABLE_NAME + '" ADD "' + NAME + '"'
END +
CASE WHEN is_computed_column = 1 THEN
' AS ' + computed_definition COLLATE Latin1_General_CI_AS
ELSE
' ' + system_type_name +
CASE WHEN collation_name IS NOT NULL THEN
' COLLATE ' + collation_name
ELSE
''
END +
CASE WHEN is_nullable = 0 THEN
' NOT'
ELSE
''
END +
' NULL'+
CASE WHEN is_identity_column = 1 THEN
' IDENTITY(1,1)'
ELSE
''
END
END +
CASE WHEN column_ordinal = 1 THEN
')'
ELSE
''
END +
CASE WHEN pk IS NOT NULL THEN
';ALTER TABLE "' + @ScriptForDb + '"."dbo"."' + @TABLE_NAME + '" ADD CONSTRAINT PK_' + DBO.StripOut_FN(@TABLE_NAME, '%[^A-Za-z0-9_]%') + '_' + DBO.StripOut_FN(NAME, '%[^A-Za-z0-9_]%') + ' PRIMARY KEY NONCLUSTERED ("' + NAME + '") '
WHEN default_constraint IS NOT NULL THEN
';ALTER TABLE "' + @ScriptForDb + '"."dbo"."' + @TABLE_NAME + '" ADD CONSTRAINT DF_' + DBO.StripOut_FN(@TABLE_NAME, '%[^A-Za-z0-9_]%') + '_' + DBO.StripOut_FN(NAME, '%[^A-Za-z0-9_]%') + ' DEFAULT ' + default_constraint + ' FOR "' + NAME + '"'
ELSE
''
END
SQL, NAME
FROM A
ORDER BY column_ordinal
insert into @t(column_ordinal, sql, cname) values((select count(*) from @t) + 1, 'END TRY BEGIN CATCH IF (XACT_STATE()) = -1 BEGIN ROLLBACK TRAN; THROW; END END CATCH; IF (XACT_STATE()) = 1 COMMIT TRAN;', '')
return
end
If you're looking for top-tier software developer to hire, look no further!
✨ What I offer:
- Website Development: Turn your idea into a fully functional website.
- Mobile App Creation: Reach your audience on every device.
- Custom Software Solutions: Software tailored to your business needs.
- Database Management: Ensure your data is structured, secure, and accessible.
- Consultations: Not sure where to start? Let's discuss the best tech solutions for your goals.
With 20+ years of experience in the tech industry, I've honed my skills to provide only the best for my clients. Let's turn your vision into reality. Contact me today to kick off your next digital project!
Leave a Comment