มีวิธีสร้างสคริปต์สร้างจากตารางที่มีอยู่ใน T-SQL (โดยไม่ใช้ SMO เนื่องจาก T-SQL ไม่สามารถเข้าถึง SMO ได้) สมมติว่าเป็นกระบวนงานที่เก็บไว้ที่รับชื่อตารางและส่งคืนสตริงที่มีสคริปต์สร้างสำหรับตารางที่กำหนดหรือไม่
ตอนนี้ให้ฉันอธิบายสถานการณ์ที่ฉันกำลังเผชิญเนื่องจากอาจมีวิธีอื่นในการเข้าถึงสิ่งนี้ ฉันมีอินสแตนซ์ที่มีฐานข้อมูลหลายโหล ฐานข้อมูลเหล่านี้ทั้งหมดมีสคีมาเหมือนกันทั้งหมดตารางเดียวกันดัชนีและอื่น ๆ พวกเขาถูกสร้างขึ้นเป็นส่วนหนึ่งของการติดตั้งซอฟต์แวร์บุคคลที่สาม ฉันต้องมีวิธีในการทำงานกับพวกเขาเพื่อให้ฉันสามารถรวบรวมข้อมูลจากพวกเขาในลักษณะเฉพาะกิจ ผู้คนที่ดีที่ dba.se ได้ช่วยฉันที่นี่แล้วจะสร้างทริกเกอร์ในฐานข้อมูลอื่นได้อย่างไร
ขณะนี้ฉันต้องการค้นหาวิธีการเลือกจากตารางในฐานข้อมูลทั้งหมด ฉันได้บันทึกชื่อฐานข้อมูลทั้งหมดลงในตารางที่เรียกDatabasees
และฉันเขียนสคริปต์ต่อไปนี้เพื่อดำเนินการคำสั่งที่เลือกในพวกเขาทั้งหมด:
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
select * into #tmp from Database1.dbo.Table1 where 1=0
DECLARE @statement nvarchar(max) =
N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1'
DECLARE @LastDatabaseID INT
SET @LastDatabaseID = 0
DECLARE @DatabaseNameToHandle varchar(60)
DECLARE @DatabaseIDToHandle int
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
WHILE @DatabaseIDToHandle IS NOT NULL
BEGIN
DECLARE @sql NVARCHAR(MAX) = QUOTENAME(@DatabaseNameToHandle) + '.dbo.sp_executesql'
EXEC @sql @statement
SET @LastDatabaseID = @DatabaseIDToHandle
SET @DatabaseIDToHandle = NULL
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
END
select * from #tmp
DROP TABLE #tmp
อย่างไรก็ตามสคริปต์ด้านบนล้มเหลวพร้อมกับข้อความต่อไปนี้:
ค่าที่ชัดเจนสำหรับคอลัมน์ข้อมูลประจำตัวในตาราง '#tmp' สามารถระบุได้เมื่อมีการใช้รายการคอลัมน์และ IDENTITY_INSERT เปิดอยู่
เพิ่มสิ่งนี้:
SET IDENTITY_INSERT #tmp ON
ไม่ช่วยเนื่องจากฉันไม่สามารถระบุรายการคอลัมน์และเก็บไว้ทั่วไป
ใน SQL ไม่มีวิธีการเปลี่ยนข้อมูลประจำตัวในตารางที่กำหนด คุณสามารถวางคอลัมน์และเพิ่มคอลัมน์เท่านั้นซึ่งเปลี่ยนลำดับคอลัมน์อย่างชัดเจน และหากลำดับคอลัมน์เปลี่ยนไปคุณต้องระบุรายการคอลัมน์อีกครั้งซึ่งจะแตกต่างกันไปขึ้นอยู่กับตารางที่คุณสืบค้น
ดังนั้นฉันคิดว่าถ้าฉันสามารถสร้างตาราง scrip ในรหัส T-SQL ของฉันฉันสามารถจัดการกับนิพจน์การจัดการสตริงเพื่อลบคอลัมน์ข้อมูลประจำตัวและเพิ่มคอลัมน์สำหรับชื่อฐานข้อมูลไปยังชุดผลลัพธ์
ทุกคนสามารถคิดวิธีที่ง่ายในการบรรลุสิ่งที่ฉันต้องการได้หรือไม่